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?

kannix
sumber

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 .

moka
sumber
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 .

Temui Mehta
sumber
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');
GreensterRox
sumber