มี 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);