J'obtiens que .toEqual () vérifie l'égalité de tous les champs pour les objets simples:
expect(
{"key1":"pink wool","key2":"diorite"}
).toEqual(
{"key2":"diorite","key1":"pink wool"}
);
Donc ça passe.
Mais il n'en va pas de même pour les tableaux:
expect(["pink wool", "diorite"]).toEqual(["diorite", "pink wool"]);
Il ne semble pas y avoir de fonction de correspondance qui le fasse dans les documents de plaisanterie, c'est-à-dire qui teste l'égalité de deux tableaux indépendamment de la position de leurs éléments. Dois-je tester chaque élément d'un tableau par rapport à tous les éléments de l'autre et vice versa? Ou existe-t-il un autre moyen?
Il n'y a pas de méthode intégrée pour comparer les tableaux sans comparer l'ordre, mais vous pouvez simplement trier les tableaux à l'aide de .sort()
avant de faire une comparaison:
expect(["ping wool", "diorite"].sort()).toEqual(["diorite", "pink wool"].sort());`
Vous pouvez vérifier l'exemple dans ce violon .
Mettez les éléments dans un ensemble. Jest sait comment faire correspondre ces derniers.
expect(new Set(["pink wool", "diorite"])).toEqual(new Set(["diorite", "pink wool"]));
utilisez expect.arrayContaining()
https://jestjs.io/docs/en/expect#expectarraycontainingarray
par exemple.,
expect(["ping wool", "diorite"])
.toEqual(expect.arrayContaining(["diorite", "pink wool"]));
Comme déjà mentionné expect.arrayContaining
vérifie si le tableau actual
contient le tableau expected
en tant que sous-ensemble. Pour vérifier l’équivalence, on peut
expected
contient le tableau actual
:// This is TypeScript, but remove the types and you get JavaScript
const expectArrayEquivalence = <T>(actual:T[], expected: T[]) => {
expect(actual).toEqual(expect.arrayContaining(expected));
expect(expected).toEqual(expect.arrayContaining(actual));
};
Cela a toujours le problème que lorsque le test échoue dans la première assertion, on n'est informé que des éléments manquants dans actual
et pas des éléments supplémentaires qui ne sont pas dans expected
.