มี jest matcher เพื่อ comapare Array <Objects> หรือไม่? [ซ้ำ]
Oct 31 2020
ฉันกำลังพยายามทดสอบอาร์เรย์ของอ็อบเจ็กต์สองตัวว่าเท่ากันทุกประการลองกับ toEqual matcher แต่ดูเหมือนว่าจะใช้ได้กับ Array of strings เท่านั้นมีตัวจับคู่ใด ๆ ใน Jest เพื่อตอบสนองเงื่อนไข โปรดอย่าทำเครื่องหมายว่าซ้ำซ้อนฉันไม่พบคำตอบที่ชัดเจน
const arr1 = [{name: 'sam', degree: 'engineer', age: '23'}, {name: 'jane', degree: 'accounts', age: '25'}]
const arr2 = [{name: 'jane', degree: 'accounts', age: '25'},{name: 'sam', degree: 'engineer', age: '23'}]
expect(arr1).toEqual(arr2) // should pass the testcase
คำตอบ
1 bensiu Oct 31 2020 at 10:47
คุณสามารถแก้ไขได้เป็นชุดของความคาดหวัง
expect(arr1).toBeArray();
expect(arr2).toBeArray();
expect(arr1).toBeArrayOfSize(arr2.length);
expect(arr2).toBeArrayOfSize(arr1.length);
ลูปถัดไปแต่ละอาร์เรย์และตรวจสอบว่าอันที่สองมีองค์ประกอบหรือไม่
arr1.forEach(item => {
expect(arr2).toContain(item);
});
และ
arr2.forEach(item => {
expect(arr1).toContain(item);
});
1 muthu Oct 31 2020 at 10:48
สิ่งนี้ใช้ได้กับฉัน
const sortResponseData = arr1.sort((a: any, b: any) => {
return a.name > b.name
? 1
: b.name > a.name
? -1
: 0;
});
const sortEntityMetaData = arr2.sort((a: any, b: any) => {
return a.name > b.name
? 1
: b.name > a.name
? -1
: 0;
});
expect(sortResponseData).toEqual(sortEntityMetaData);