La documentation Jest se lit comme suit:
toBe vérifie simplement qu'une valeur correspond à ce que vous attendez. Il utilise === pour vérifier une stricte égalité.
Et pour toEqual
:
Utilisez .toEqual pour vérifier que deux objets ont la même valeur. Ce matcher vérifie de manière récursive l'égalité de tous les champs, plutôt que de vérifier l'identité de l'objet, ce qui est également appelé "égal profond". Par exemple, toEqual et toBe se comportent différemment dans cette suite de tests, donc tous les tests réussissent.
const x = { a: { b: 3 } };
const y = { a: { b: 3 } };
expect(x).toEqual(y);
expect(x).toBe(y);
Dans ce cas, toEqual
réussit mais toBe
échoue. Je comprends que toEqual
passe car il effectue une vérification égal profond. Pourquoi toBe
échoue dans ce cas?
Existe-t-il également des meilleures pratiques pour l'utilisation de toBe
et toEqual
(pas seulement dans Jest mais aussi dans d'autres frameworks de test)?
Il échoue car x
et y
sont des instances différentes et différentes comme dans (x === y) === false
. Vous pouvez utiliser toBe
pour les primitives comme les chaînes, les nombres ou les booléens pour tout le reste, utilisez toEqual
. Par exemple
x = 4
y = 4
x === y // true
x = 'someString'
y = 'someString'
x === y // true
Même les objets vides ne sont pas égaux
x = {}
y = {}
x === y //false