Al contrario di codice non-asserito con controlli developer-friendly personalizzati,duplicazione Node.js `affermazioni assert` in spec` expect`
class Some {
constructor(arg) {
if (Array.isArray(arg) && arg[0] === 'foo')
this.foobar = arg.concat('bar').join('');
else
console.error('Bad Some constructor arg');
}
}
codice attualmente testato è fortemente compresso con nodo assert
asserzioni con ragionevolmente significativa message
argomenti:
class Some {
constructor(arg) {
assert.deepEqual(arg, ['foo'], 'Some constructor arg');
this.foobar = arg.concat('bar').join('');
}
}
L'affermazione è lì per
- mantenere il codice piatta e leggibile
- forniscono un feedback significativo sulla uso scorretto con stack di chiamate
- impedire l'esecuzione la funzione e non si propagano l'errore più
- generare un errore e lasciare la gestione degli errori al chiamante
spec attuale può sembrare che:
it('...',() => {
let some = new Some(['foo']);
expect(some).to...
che ti passa - utilizzo desiderabile si afferma nelle specifiche, l'utilizzo indesiderato è affermato nel codice testato.
a sovrapporsi affermazioni di codice in parte potrebbe essere ancora
it('...',() => {
const { AssertionError } = require('assert');
let some = new Some(['foo']);
expect(some).to...
expect(() => new Some(['bar']).to.throw(AssertionError);
Così abbiamo praticamente per scontato qui che la metà dei posti di lavoro test è stato già fatto nel codice stesso con assert
e saltare i dettagli (to.not.throw
e la congruenza AssertionError messaggi).
L'esempio precedente utilizza Mocha + Chai, ma la stessa cosa vale per Jasmine.
caso App asserzioni essere trattati come qualsiasi altro righe di codice e ha raddoppiato con asserzioni spec (di gettare, a non gettare,
AssertionError
messaggio di corrispondenza), quali sono le conseguenze di prendere una scorciatoia?È possibile verificare gli strumenti di copertura (Istanbul) tenendo conto delle asserzioni
assert
nel codice app oltre aexpect
?I test runner possono essere confusi dal fatto che si tratta di un'app, non di un'asserzione che ha generato un errore?
Alcuni esempi di progetti JS open-source di successo che dimostrano o rifiutare 'affermano asserire affermazioni' punto, in pratica, potrebbe essere anche utile.
Grazie per la lettura, non risponde alla domanda ma lo integra. Bene su 'AssertionError', l'errore del nodo può essere confuso con l'errore Chai. Potrebbe non essere un problema reale, perché l'asserzione è asserzione (anche Sinon ha una classe di errore di asserzione). Oppure potrebbe diventare un problema quando appare la domanda 'where's 'expect' for that error'. Sono abbastanza sicuro che questa parte possa essere corretta tramite 'chai.AssertionError.prototype.name'. – estus
@estus: non preoccuparti di dove proviene l'errore. I reporter di Mocha possono eseguire il dump di una traccia di stack (quella di default) in modo da poter individuare esattamente l'origine dell'errore. Faccio molta refactoring a seconda degli errori di test di Mocha per dirmi dove ho dimenticato di modificare qualche pezzo di codice. – slebetman
Thx @estus Ho aggiornato la mia risposta per includere anche la domanda relativa a Istanbul. C'è qualcos'altro che posso aiutarti a capire ulteriormente? –