kesetaraan array tes chai tidak berfungsi seperti yang diharapkan


235

Mengapa yang berikut gagal?

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

dan apa cara yang tepat untuk mengujinya?

Jawaban:


360

Seperti yang diharapkan , .equalakan membandingkan objek daripada data mereka, dan dalam kasus Anda itu adalah dua array yang berbeda.

Gunakan .eqluntuk membandingkan nilai-nilai secara mendalam. Lihat tautan ini .
Atau Anda dapat menggunakan .deep.equaluntuk mensimulasikan sama dengan .eql.
Atau dalam kasus Anda, Anda mungkin ingin memeriksa .members .

Untuk menegaskan, Anda dapat menggunakan .deepEqual, tautan .


2
FTR, sintaks sama dalam telah berubah menjadi: .deepEqual()( chaijs.com/api/assert ).
Ludder

7
Itu tidak berubah, Anda melihat fungsi Asserts , tetapi tidak Harapkan / Haruskah yang menjadi topik starter.
moka

5
Anda benar, saya tidak membaca dengan baik. Saya pikir ini hanyalah perubahan API.
Ludder

6
to.deep.equal(['a','b'])sepertinya tidak berfungsi. Namun to.have.all.members(['a','b'])demikian. sangat rumit ...
jacob

chaijs.com/plugins/deep-equal-in-any-order bekerja dengan baik ketika urutan atribut objek tidak dapat diprediksi.
asokan

60

Cobalah untuk menggunakan Equal dalam. Ini akan membandingkan array bersarang serta bersarang Json.

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

Silakan merujuk ke situs dokumentasi utama .


7
Ini juga berfungsi untuk array:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr

-1

Ini adalah cara menggunakan chai untuk menguji secara mendalam array asosiatif.

Aku punya masalah mencoba untuk menegaskan bahwa dua asosiatif array yang sama. Saya tahu bahwa ini seharusnya tidak benar-benar digunakan dalam javascript tapi saya menulis tes unit di sekitar kode lama yang mengembalikan referensi ke array asosiatif. :-)

Saya melakukannya dengan mendefinisikan variabel sebagai objek (bukan array) sebelum pemanggilan fungsi saya:

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');
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.