bình đẳng mảng thử nghiệm không hoạt động như mong đợi


234

Tại sao sau đây thất bại?

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

và cách đúng để kiểm tra điều đó là gì?

Câu trả lời:


360

Để mong đợi , .equalsẽ so sánh các đối tượng chứ không phải 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ị. Kiểm tra liên kết 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 kiểm tra .members .

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


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

7
Nó không thay đổi, bạn đang xem chức năng Asserts , nhưng không mong đợi / Nên bắt đầu chủ đề nào.
moka

5
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

6
to.deep.equal(['a','b'])dường như không hoạt động. Tuy nhiên to.have.all.members(['a','b'])không. quá cồng kềnh
jacob

chaijs.com/plugins/deep-equal-in-any-order hoạt động tốt khi thứ tự các thuộc tính đối tượng không thể đoán trước.
asokan

59

Cố gắng sử dụng Equal 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 trang web tài liệu chính .


6
Điều này cũng hoạt động cho các mảng:expect([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 các mảng kết hợp.

Tôi đã có một vấn đề khi cố gắng khẳng định rằng hai mảng kết hợp là bằng nhau. Tôi biết rằng những thứ 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 điều đó bằng cách định nghĩa biến là một đối tượng (không phải mảng) trước lệnh 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');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.