toBe()versus toEqual(): toEqual()sprawdza równoważność. toBe()z drugiej strony upewnia się, że są dokładnie tym samym obiektem.
Powiedziałbym „użyj” toBe()przy porównywaniu wartości i toEqual()przy porównywaniu obiektów.
Porównując prymitywne typy toEqual()i toBe()da ten sam wynik. Podczas porównywania obiektów toBe()jest bardziej rygorystyczne porównanie, a jeśli nie jest to dokładnie ten sam obiekt w pamięci, zwróci wartość false. Więc jeśli nie chcesz się upewnić, że jest to dokładnie ten sam obiekt w pamięci, użyj go toEqual()do porównania obiektów.
Sprawdź ten link, aby uzyskać więcej informacji: http://evanhahn.com/how-do-i-jasmine/
Teraz, patrząc na różnicę między toBe()i toEqual(), jeśli chodzi o liczby, nie powinno być żadnej różnicy tak długo, jak to porównanie jest poprawne. 5zawsze będzie równoważne z 5.
Miłe miejsce do zabawy i zobaczenia różnych wyników jest tutaj
Aktualizacja
Łatwym sposobem na sprawdzenie toBe()i toEqual()zrozumienie, co dokładnie robią w JavaScript. Według Jasmine API, znaleziono tutaj :
Funkcja toEqual () działa dla prostych literałów i zmiennych i powinna działać dla obiektów
toBe () porównuje z ===
Zasadniczo to, co to mówi, jest toEqual()i toBe()jest podobnym ===operatorem Javascripts , oprócz tego toBe()sprawdza również, czy jest to dokładnie ten sam obiekt, w tym również w przykładzie poniżej objectOne === objectTwo //returns false. Jednak toEqual()w tej sytuacji zwróci wartość true.
Teraz możesz przynajmniej zrozumieć, dlaczego:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
To dlatego, że, jak wspomniano w tym odpowiedzi na inną, ale podobną pytanie,=== operator faktycznie oznacza, że oba argumenty odwoływać się do tego samego obiektu, lub w przypadku typów wartości, mają taką samą wartość.
toEqual()porówna według klucza / wartości-zawartości;toBe()porówna według odwołania do obiektu.