Cosa c'è di sbagliato in questo test?
Cosa c’è di sbagliato nel test di pow
?
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. Sintatticamente il test corretto ed esegue senza errori.
Il test dimostra una delle tentazion che uno sviluppatore potrebbe incontrare mentre scrive dei test.
Quello che abbiamo qui sono 3 test, ma sono stati scritti come una singola funzione con 3 assunzioni.
Qualche volta può risultare più semplice scrivere in questo modo, ma in caso di errori, risulta molto meno ovvio cosa è andato storto.
Se si genera un errore all’interno di un flusso d’esecuzione complesso, dovremmo controllare ogni dato. Saremmo costretti a debuggare il test.
Una scelta migliore potrebbe essere di rompere i test in più it
scrivendo chiaramente gli inpute gli output.
Come qui:
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);
});
});
Rimpiazziamo quindi il singolo it
con describe
e creiamo un gruppo di blocchi it
. Ora se qualche test fallisce saremmo in grado di vedere chiaramente quale.
Possiamo anche isolare un singolo test ed eseguirlo in solitaria scrivendo it.only
piuttosto di 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 will run only this block
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);
});
});