เหตุใดต่อไปนี้จึงล้มเหลว
expect([0,0]).to.equal([0,0]);
และวิธีการทดสอบที่ถูกต้องคืออะไร?
เหตุใดต่อไปนี้จึงล้มเหลว
expect([0,0]).to.equal([0,0]);
และวิธีการทดสอบที่ถูกต้องคืออะไร?
คำตอบ:
สำหรับการคาดหวัง , .equal
จะเปรียบเทียบวัตถุมากกว่าข้อมูลของพวกเขาและในกรณีของคุณเป็นสองอาร์เรย์ที่แตกต่างกัน
ใช้.eql
เพื่อเปรียบเทียบค่าอย่างลึกซึ้ง ลองลิงค์นี้
หรือคุณอาจจะใช้ในการสั่งซื้อเพื่อจำลองเช่นเดียวกับ.deep.equal
หรือในกรณีของคุณคุณอาจต้องการตรวจสอบ.eql
.members
to.deep.equal(['a','b'])
ดูเหมือนจะไม่ทำงาน แต่to.have.all.members(['a','b'])
ไม่ ยุ่งยาก…
ลองใช้ Deep Equal มันจะเปรียบเทียบอาร์เรย์ที่ซ้อนกันเช่นเดียวกับ Json ซ้อนกัน
expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
นี่คือวิธีการใช้ชัยเพื่อทดสอบอาร์เรย์ที่เชื่อมโยงอย่างลึกซึ้ง
ฉันมีปัญหาพยายามยืนยันว่าอาร์เรย์เชื่อมโยงสองชุดเท่ากัน ฉันรู้ว่าไม่ควรใช้สิ่งเหล่านี้ในจาวาสคริปต์ แต่ฉันกำลังเขียนการทดสอบหน่วยเกี่ยวกับรหัสดั้งเดิมซึ่งส่งคืนการอ้างอิงไปยังอาร์เรย์ที่เชื่อมโยงกัน :-)
ฉันทำโดยกำหนดตัวแปรเป็นวัตถุ (ไม่ใช่อาร์เรย์) ก่อนการเรียกใช้ฟังก์ชันของฉัน:
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');
.deepEqual()
( chaijs.com/api/assert )