Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Le Bloc `describe` | Utilisation d'un Cadre d'Automatisation des Tests
Introduction aux Tests d'Automatisation QA

book
Le Bloc `describe`

Résumé

Parfois, nous pouvons avoir de nombreux tests dans un seul Script de Test, ce qui peut devenir désorganisé et difficile à gérer. Par exemple, créons un nouveau fichier appelé math.js avec une classe Math dedans :

js
class Math {
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
static multiply(a, b) {
return a * b;
}
static divide(a, b) {
return a / b;
}
}

module.exports = Math;

Cette classe contient quatre méthodes et nous écrivons plusieurs cas de test pour chaque méthode. Étant donné que les cas de test sont liés à une seule classe, nous stockerions donc conventionnellement tous les cas de test qui y sont liés dans un seul fichier appelé math.test.js :

js
const Math = require('./math');

test('add two numbers', () => {
expect(Math.add(1, 2)).toBe(3);
expect(Math.add(-1, 1)).toBe(0);
expect(Math.add(-1, -1)).toBe(-2);
});

test('add zero to a number', () => {
expect(Math.add(0, 0)).toBe(0);
expect(Math.add(5, 0)).toBe(5);
expect(Math.add(0, 5)).toBe(5);
});

test('return the difference between two numbers', () => {
expect(Math.subtract(5, 3)).toBe(2);
expect(Math.subtract(3, 5)).toBe(-2);
expect(Math.subtract(-1, -1)).toBe(0);
});

test('handle subtracting zero', () => {
expect(Math.subtract(5, 0)).toBe(5);
expect(Math.subtract(0, 5)).toBe(-5);
expect(Math.subtract(0, 0)).toBe(0);
});

test('return the product of two numbers', () => {
expect(Math.multiply(2, 3)).toBe(6);
expect(Math.multiply(-2, 3)).toBe(-6);
expect(Math.multiply(-2, -3)).toBe(6);
});

test('handle multiplying by zero', () => {
expect(Math.multiply(0, 5)).toBe(0);
expect(Math.multiply(5, 0)).toBe(0);
expect(Math.multiply(0, 0)).toBe(0);

Cependant, comme vous pouvez le remarquer, cela peut devenir confus et désorganisé car il contient des cas de test pour plusieurs méthodes différentes. Si nous exécutons les tests ci-dessus en utilisant le drapeau verbose, vous verrez que les tests sont tous empilés dans une séquence sans distinction.

Dans de telles situations, il est impératif de regrouper les cas de test associés en utilisant des blocs describe :

js
// General Syntax: describe(text, callback);

describe('summary of the contained test cases', () => {
// Test Cases Here
});

En utilisant la syntaxe ci-dessus, nous pouvons regrouper les cas de test de chaque méthode :

js
const Math = require('./math');

describe('add method', () => {
test('add two numbers', () => {
expect(Math.add(1, 2)).toBe(3);
expect(Math.add(-1, 1)).toBe(0);
expect(Math.add(-1, -1)).toBe(-2);
});
test('add zero to a number', () => {
expect(Math.add(0, 0)).toBe(0);
expect(Math.add(5, 0)).toBe(5);
expect(Math.add(0, 5)).toBe(5);
});
});

describe('subtract method', () => {
test('return the difference between two numbers', () => {
expect(Math.subtract(5, 3)).toBe(2);
expect(Math.subtract(3, 5)).toBe(-2);
expect(Math.subtract(-1, -1)).toBe(0);
});
test('handle subtracting zero', () => {
expect(Math.subtract(5, 0)).toBe(5);
expect(Math.subtract(0, 5)).toBe(-5);
expect(Math.subtract(0, 0)).toBe(0);
});
});

describe('multiply method', () => {
test('return the product of two numbers', () => {
expect(Math.multiply(2, 3)).toBe(6);
expect(Math.multiply(-2, 3)).toBe(-6);
expect(Math.multiply(-2, -3)).toBe(6);
});

Maintenant, le code semble plus organisé, et si nous exécutons les tests avec le drapeau verbose, vous remarquerez que la sortie est également plus hiérarchique, ce qui facilite la visualisation des différents cas de test pour chaque méthode.

Il est également important de noter que nous pouvons imbriquer des blocs describe pour organiser davantage la hiérarchie des cas de test :

js
const Math = require('./math');

describe('Testing Math Class', () => {
describe('add method', () => {
test('add two numbers', () => {
expect(Math.add(1, 2)).toBe(3);
expect(Math.add(-1, 1)).toBe(0);
expect(Math.add(-1, -1)).toBe(-2);
});
test('add zero to a number', () => {
expect(Math.add(0, 0)).toBe(0);
expect(Math.add(5, 0)).toBe(5);
expect(Math.add(0, 5)).toBe(5);
});
});

describe('subtract method', () => {
test('return the difference between two numbers', () => {
expect(Math.subtract(5, 3)).toBe(2);
expect(Math.subtract(3, 5)).toBe(-2);
expect(Math.subtract(-1, -1)).toBe(0);
});
test('handle subtracting zero', () => {
expect(Math.subtract(5, 0)).toBe(5);
expect(Math.subtract(0, 5)).toBe(-5);
expect(Math.subtract(0, 0)).toBe(0);
});
});

describe('multiply method', () => {
test('return the product of two numbers', () => {
expect(Math.multiply(2, 3)).toBe(6);
expect(Math.multiply(-2, 3)).toBe(-6);
expect(Math.multiply(-2, -3)).toBe(6);

Les blocs describe aident également à définir la portée de chaque cas de test. Nous verrons certaines utilisations des portées des cas de test dans les sujets ultérieurs.

En dehors de cela, comme nous regroupons généralement les cas de test dans un bloc describe, chaque bloc describe est appelé une Suite de Tests dans ce cas. Il est important de noter que, dans d'autres langages de programmation, un Script de Test entier est généralement appelé une Suite de Tests.

question mark

À quoi peut servir le bloc describe dans Jest ? (Sélectionnez tout ce qui s'applique)

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6

Demandez à l'IA

expand
ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

We use cookies to make your experience better!
some-alt