Aller au contenu principal
Version: 27.0

Utilisation des comparateurs

Jest utilise des « comparateurs » (NdT « matchers ») pour vous permettre de tester des valeurs de différentes manières. Ce document présente quelques comparateurs couramment utilisés. Pour la liste complète, consultez la documentation de l'API de expect.

Comparateurs courants#

La façon la plus simple de tester une valeur est de garantir une égalité exacte.

test('deux plus deux font quatre', () => {
expect(2 + 2).toBe(4);
});

Dans ce code, expect(2 + 2) retourne un objet « attendu ». En règle générale, vous ne ferez pas grand-chose avec ces objets d'attente, si ce n'est appeler des comparateurs sur ces mêmes objets. Dans ce code, .toBe(4) est le comparateur. Lorsque Jest s'exécute, il repère toutes les comparateurs qui échouent afin de vous afficher de jolis messages d'erreur.

toBe utilise Object.is pour tester l'égalité exacte. Si vous voulez vérifier la valeur d'un objet, utilisez plutôt toEqual :

test('object assignment', () => {
const data = {one: 1};
data['two'] = 2;
expect(data).toEqual({one: 1, two: 2});
});

toEqual vérifie récursivement chaque champ d'un objet ou d'un tableau.

Vous pouvez également tester le contraire d'un comparateur :

test('l\'addition de nombres positifs n\'est pas égale à zéro', () => {
for (let a = 1; a < 10; a++) {
for (let b = 1; b < 10; b++) {
expect(a + b).not.toBe(0);
}
}
});

Valeur de vérité#

Dans les tests, vous devez parfois faire la distinction entre undefined, null et false, mais dans d'autres cas, vous ne souhaitez pas les traiter différemment. Jest dispose d'outils qui vous permettent d'être plus précis sur ce que vous voulez.

  • toBeNull correspond uniquement à null
  • toBeUndefined correspond uniquement à undefined
  • toBeDefined est le contraire de toBeUndefined
  • toBeTruthy correspond à tout ce qu'une instruction if traite comme vrai
  • toBeFalsy correspond à tout ce qu'une instruction if traite comme faux

Par exemple :

test('null', () => {
const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();
});
test('zero', () => {
const z = 0;
expect(z).not.toBeNull();
expect(z).toBeDefined();
expect(z).not.toBeUndefined();
expect(z).not.toBeTruthy();
expect(z).toBeFalsy();
});

Vous devez utiliser le comparateur qui correspond le plus précisément à ce que vous voulez que votre code fasse.

Nombres#

La plupart des méthodes de comparaison de nombres ont des comparateurs équivalents.

test('deux plus deux', () => {
const value = 2 + 2;
expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);
// toBe et toEqual sont équivalents pour les nombres
expect(value).toBe(4);
expect(value).toEqual(4);
});

Pour l'égalité en virgule flottante, utilisez toBeCloseTo au lieu de toEqual, car vous ne voulez pas qu'un test dépende d'une minuscule erreur d'arrondi.

test('ajout de nombres à virgule flottantes', () => {
const value = 0.1 + 0.2;
//expect(value).toBe(0.3); Cela ne fonctionnera pas en raison d'une erreur d'arrondi
expect(value).toBeCloseTo(0.3); // Cela fonctionne.
});

Chaines de caractères (Strings)#

Vous pouvez vérifier les chaînes de caractères par rapport aux expressions régulières avec toMatch :

test('il n'y a pas de I dans team', () => {
expect('team').not.toMatch(/I/);
});
test('mais il y a "stop" dans Christoph', () => {
expect('Christoph').toMatch(/stop/);
});

Tableaux et itérables#

Vous pouvez vérifier si un tableau ou une itérable contient un élément particulier en utilisant toContain :

const shoppingList = [
'diapers',
'kleenex',
'trash bags',
'paper towels',
'milk',
];
test('la liste de course possède du lait', () => {
expect(shoppingList).toContain('milk');
expect(new Set(shoppingList)).toContain('milk');
});

Exceptions#

Si vous voulez tester si une fonction particulière lève une erreur lorsqu'elle est appelée, utilisez toThrow.

function compileAndroidCode() {
throw new Error('vous utilisez le mauvais JDK');
}
test('la compilation d'android se déroule comme prévu', () => {
expect(() => compileAndroidCode()).toThrow();
expect(() => compileAndroidCode()).toThrow(Error);
// Vous pouvez également utiliser le message d'erreur exact ou une regexp.
expect(() => compileAndroidCode()).toThrow('vous utilisez le mauvais JDK');
expect(() => compileAndroidCode()).toThrow(/JDK/);
});

Remarque : la fonction qui lève une exception doit être appelée à l'intérieur d'une fonction enveloppante, sinon l'assertion toThrow échouera.

Et bien plus encore#

Ce n'est qu'un avant-goût. Pour une liste complète des comparateurs, consultez les docs de référence.

Une fois que vous avez pris connaissance des comparateurs disponibles, la prochaine étape consiste à découvrir comment Jest vous permet de tester du code asynchrone .