toBe()
so với toEqual()
: toEqual()
kiểm tra tương đương. toBe()
mặt khác, đảm bảo rằng chúng là cùng một đối tượng.
Tôi sẽ nói sử dụng toBe()
khi so sánh các giá trị và toEqual()
khi so sánh các đối tượng.
Khi so sánh các loại nguyên thủy, toEqual()
và toBe()
sẽ mang lại kết quả tương tự. Khi so sánh các đối tượng, toBe()
là một so sánh chặt chẽ hơn và nếu nó không phải là cùng một đối tượng chính xác trong bộ nhớ thì điều này sẽ trả về false. Vì vậy, trừ khi bạn muốn chắc chắn rằng đó là cùng một đối tượng trong bộ nhớ, hãy sử dụng toEqual()
để so sánh các đối tượng.
Kiểm tra liên kết này để biết thêm thông tin: http://evanhahn.com/how-do-i-jasmine/
Bây giờ khi nhìn vào sự khác biệt giữa toBe()
và toEqual()
khi nói đến các con số, không nên có bất kỳ sự khác biệt nào miễn là so sánh của bạn là chính xác. 5
sẽ luôn tương đương với 5
.
Một nơi tốt đẹp để chơi xung quanh với điều này để thấy kết quả khác nhau là ở đây
Cập nhật
Một cách dễ dàng để xem xét toBe()
và toEqual()
là hiểu chính xác những gì họ làm trong JavaScript. Theo API Jasmine, được tìm thấy ở đây :
toEqual () hoạt động cho các biến và chữ đơn giản và nên hoạt động cho các đối tượng
toBe () so sánh với ===
Về cơ bản những gì đang nói là toEqual()
và toBe()
là ===
toán tử Javascripts tương tự, ngoại trừ toBe()
cũng đang kiểm tra để đảm bảo rằng đó là cùng một đối tượng, trong ví dụ dưới đây objectOne === objectTwo //returns false
. Tuy nhiên, toEqual()
sẽ trở lại đúng trong tình huống đó.
Bây giờ, bạn ít nhất có thể hiểu tại sao khi được đưa ra:
var objectOne = {
propertyOne: str,
propertyTwo: num
}
var objectTwo = {
propertyOne: str,
propertyTwo: num
}
expect(objectOne).toBe(objectTwo); //returns false
Đó là bởi vì, như đã nêu trong câu trả lời này cho một câu hỏi khác nhau, nhưng tương tự, các ===
nhà điều hành thực sự có nghĩa rằng cả hai toán hạng tham khảo cùng một đối tượng, hoặc trong trường hợp các loại giá trị, có cùng giá trị.
toEqual()
sẽ so sánh theo khóa / giá trị-nội dung;toBe()
sẽ so sánh bằng cách tham chiếu đối tượng.