ฉันใช้ Mocha เพื่อทดสอบโมดูลขนาดเล็กในแอปพลิเคชัน Express.js ในโมดูลนี้หนึ่งในฟังก์ชันของฉันส่งคืนอาร์เรย์ ฉันต้องการทดสอบว่าอาร์เรย์ถูกต้องสำหรับอินพุตที่กำหนดหรือไม่ ฉันทำเช่นนี้:
suite('getWords', function(){
test("getWords should return list of numbers", function() {
var result = ['555', '867', '5309'];
assert.equal(result, getWords('555-867-5309'));
});
});
เมื่อสิ่งนี้ทำงานฉันได้รับข้อผิดพลาดในการยืนยันดังต่อไปนี้:
AssertionError: ["555","867","5309"] == ["555","867","5309"]
อย่างไรก็ตามเมื่อฉันเปลี่ยนการทดสอบเป็น an assert.deepEqual
การทดสอบก็ผ่านไปได้ด้วยดี ฉันสงสัยว่ามันเป็นกรณีของ==
vs ===
แต่ถ้าฉันเข้า
[1,2,3] === [1,2,3]
ในบรรทัดคำสั่ง node.js ฉันยังคงได้รับเท็จ
เหตุใดอาร์เรย์จึงไม่เปรียบเทียบกับค่าอื่น ๆ (เช่น1 == 1
) และอะไรคือความแตกต่างระหว่าง assert.equal และ assert.deepEqual?
deepEqual()
; ไม่ใช่สิ่งที่คุณคิดในการเปรียบเทียบจนกว่าคุณจะเจอมันจริงๆ