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 :
js9912345678910111213141516171819class 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
:
js99123456789101112131415161718192021222324252627282930313233343536const 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
:
js912345// 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 :
js99123456789101112131415161718192021222324252627282930313233343536const 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 :
js99123456789101112131415161718192021222324252627282930313233343536const 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.
Merci pour vos commentaires !
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion