Quel est le problème dans le test ?
Qu’est-ce qui ne va pas dans le test de pow
ci-dessous ?
it("Raises x to the power n", function() {
let x = 5;
let result = x;
assert.equal(pow(x, 1), result);
result *= x;
assert.equal(pow(x, 2), result);
result *= x;
assert.equal(pow(x, 3), result);
});
P.S. Syntaxiquement, le test est correct et réussi.
Le test illustre l’une des tentations qu’un développeur rencontre lorsqu’il écrit des tests.
Ce que nous avons ici est en fait 3 tests, mais présentés comme une seule fonction avec 3 affirmations.
Parfois, il est plus facile d’écrire de cette façon, mais si une erreur se produit, ce qui a mal tourné est beaucoup moins évident.
Si une erreur survient au beau milieu d’un flux d’exécution complexe, alors nous devrons bien comprendre les données à ce stade. Nous devrons en fait déboguer le test.
Il serait bien préférable de diviser le test en plusieurs blocs it
avec des entrées et des sorties clairement écrites.
Comme ceci :
describe("Raises x to power n", function() {
it("5 in the power of 1 equals 5", function() {
assert.equal(pow(5, 1), 5);
});
it("5 in the power of 2 equals 25", function() {
assert.equal(pow(5, 2), 25);
});
it("5 in the power of 3 equals 125", function() {
assert.equal(pow(5, 3), 125);
});
});
Nous avons remplacé l’it
unique par un describe
et un groupe d’it
. Si quelque chose échouait, nous verrions clairement quelles étaient les données erronées.
Nous pouvons également isoler un seul test et l’exécuter en mode autonome en l’écrivant it.only
à la place de it
:
describe("Raises x to power n", function() {
it("5 in the power of 1 equals 5", function() {
assert.equal(pow(5, 1), 5);
});
// Mocha ne va exécuter que ce code
it.only("5 in the power of 2 equals 25", function() {
assert.equal(pow(5, 2), 25);
});
it("5 in the power of 3 equals 125", function() {
assert.equal(pow(5, 3), 125);
});
});