2013-07-08 28 views
165

Tại sao những điều sau đây thất bại?chai kiểm tra bình đẳng mảng không hoạt động như mong đợi

expect([0,0]).to.equal([0,0]); 

và cách nào đúng để kiểm tra điều đó?

+1

Xin lỗi, nhưng đây là một ví dụ tiêu biểu là lý do tôi ghét những "ngôn ngữ thông thạo "API. Nó không phải tiếng Anh: nó là một phiên bản tiếng Anh bán chạy. Vậy tại sao lại giả vờ là tiếng Anh? Đối với người không lập trình? Sau đó, tôi mong đợi nó được rõ ràng hơn và rõ ràng, không ít hơn. "Thật dễ dàng, bạn sử dụng 'bình đẳng' để kiểm tra bình đẳng ... oh, không cho mảng vì nó làm đối tượng so sánh ... tốt, mảng giống như một loại đối tượng chuyên biệt ... bạn biết đấy, chỉ cần sử dụng eql cho mảng và đừng lo lắng vì sao. " Tuyệt quá! – fool4jesus

Trả lời

258

Đối với mong đợi, .equal sẽ so sánh các đối tượng thay vì dữ liệu của chúng và trong trường hợp của bạn là hai mảng khác nhau.

Sử dụng .eql để so sánh sâu các giá trị. Hãy xem link này.
Hoặc bạn có thể sử dụng .deep.equal để mô phỏng giống như .eql.
Hoặc trong trường hợp của bạn, bạn có thể muốn check.members.

Đối với khẳng định bạn có thể sử dụng .deepEqual, link.

+2

FTR, cú pháp bằng nhau sâu đã thay đổi thành: '.deepEqual()' (http://chaijs.com/api/assert). – Ludder

+4

Nó không thay đổi, bạn đang xem xét ** ** Chức năng ** Asserts **, nhưng không ** Mong đợi/Nên ** đề tài chủ đề nào được quan tâm. – moka

+4

Bạn nói đúng, tôi đã không đọc tốt. Tôi nghĩ đó chỉ là một thay đổi API khác. – Ludder

39

Cố gắng sử dụng mức độ tương đương sâu. Nó sẽ so sánh các mảng lồng nhau cũng như Json lồng nhau.

expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' }); 

Vui lòng tham khảo main documentation site.

+4

Điều này cũng hoạt động đối với mảng: 'mong đợi ([1, 5, 10] .sort()). to.deep.equal ([1, 10, 5])' – alxndr

-1

Đây là cách sử dụng chai để kiểm tra sâu mảng kết hợp.

Tôi gặp sự cố khi cố gắng xác nhận rằng hai mảng liên kết là bằng nhau. Tôi biết rằng những điều này không thực sự được sử dụng trong javascript nhưng tôi đã viết các bài kiểm tra đơn vị xung quanh mã kế thừa trả về một tham chiếu đến một mảng kết hợp. :-)

tôi đã làm nó bằng cách định nghĩa các biến như một đối tượng (không mảng) trước khi gọi hàm của tôi:

var myAssocArray = {}; // not [] 
var expectedAssocArray = {}; // not [] 

expectedAssocArray['myKey'] = 'something'; 
expectedAssocArray['differentKey'] = 'something else'; 

// legacy function which returns associate array reference 
myFunction(myAssocArray); 

assert.deepEqual(myAssocArray, expectedAssocArray,'compare two associative arrays'); 
Các vấn đề liên quan