torna alle lezioni

Cosa c'è di sbagliato in questo test?

importanza: 5

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);
  });
});