Existe algum matcher jest para comapare Array <Objects>? [duplicado]

Oct 31 2020

Estou tentando testar dois conjuntos de objetos são exatamente iguais, tentei com toEqual matcher, mas parece que só funciona para Array de strings, existe algum matcher disponível no Jest para satisfazer a condição. por favor, não marque isto como duplicado, não encontrei respostas claras.

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

Respostas

1 bensiu Oct 31 2020 at 10:47

Você pode resolvê-lo como uma série de expectativas.

expect(arr1).toBeArray();
expect(arr2).toBeArray();
expect(arr1).toBeArrayOfSize(arr2.length);
expect(arr2).toBeArrayOfSize(arr1.length);

próximo loop de cada array e verifique se o segundo contém seu elemento

arr1.forEach(item => {
   expect(arr2).toContain(item);
});

e

arr2.forEach(item => {
   expect(arr1).toContain(item);
});
1 muthu Oct 31 2020 at 10:48

Isso funciona para mim

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