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. 5
zawsze 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.