ความเท่าเทียมกันของอาร์เรย์ทดสอบ chai ไม่ทำงานตามที่คาดไว้


235

เหตุใดต่อไปนี้จึงล้มเหลว

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

และวิธีการทดสอบที่ถูกต้องคืออะไร?

คำตอบ:


360

สำหรับการคาดหวัง , .equalจะเปรียบเทียบวัตถุมากกว่าข้อมูลของพวกเขาและในกรณีของคุณเป็นสองอาร์เรย์ที่แตกต่างกัน

ใช้.eqlเพื่อเปรียบเทียบค่าอย่างลึกซึ้ง ลองลิงค์นี้
หรือคุณอาจจะใช้ในการสั่งซื้อเพื่อจำลองเช่นเดียวกับ.deep.equal หรือในกรณีของคุณคุณอาจต้องการตรวจสอบ.eql
.members

สำหรับอ้างคุณสามารถใช้.deepEqual, การเชื่อมโยง


2
FTR ไวยากรณ์ที่มีความลึกเท่ากันได้เปลี่ยนเป็น: .deepEqual()( chaijs.com/api/assert )
Ludder

7
ไม่มีการเปลี่ยนแปลงคุณกำลังมองหาฟังก์ชั่นAssertsแต่ไม่ใช่คาดหวัง / ควรเป็นผู้เริ่มต้นหัวข้อใด
moka

5
คุณพูดถูกฉันอ่านไม่ออก ฉันคิดว่ามันเป็นเพียงการเปลี่ยนแปลง API อีกครั้ง
Ludder

6
to.deep.equal(['a','b'])ดูเหมือนจะไม่ทำงาน แต่to.have.all.members(['a','b'])ไม่ ยุ่งยาก…
jacob

chaijs.com/plugins/deep-equal-in-any-orderทำงานได้ดีเมื่อลำดับของแอตทริบิวต์ของวัตถุนั้นไม่แน่นอน
asokan

60

ลองใช้ Deep Equal มันจะเปรียบเทียบอาร์เรย์ที่ซ้อนกันเช่นเดียวกับ Json ซ้อนกัน

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

โปรดดูที่เว็บไซต์ของเอกสารหลัก


7
นอกจากนี้ยังใช้งานได้กับอาร์เรย์:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr

-1

นี่คือวิธีการใช้ชัยเพื่อทดสอบอาร์เรย์ที่เชื่อมโยงอย่างลึกซึ้ง

ฉันมีปัญหาพยายามยืนยันว่าอาร์เรย์เชื่อมโยงสองชุดเท่ากัน ฉันรู้ว่าไม่ควรใช้สิ่งเหล่านี้ในจาวาสคริปต์ แต่ฉันกำลังเขียนการทดสอบหน่วยเกี่ยวกับรหัสดั้งเดิมซึ่งส่งคืนการอ้างอิงไปยังอาร์เรย์ที่เชื่อมโยงกัน :-)

ฉันทำโดยกำหนดตัวแปรเป็นวัตถุ (ไม่ใช่อาร์เรย์) ก่อนการเรียกใช้ฟังก์ชันของฉัน:

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');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.