Si una prueba de moka se ve así
describe("create a user") { before("login to system") {} it("execute assertion") {} after("delete the user") {} }Si el bloque before o it falló, ¿el bloque after todavía se ejecuta o no?
Sí, cuando la prueba falla, se ejecutará after del gancho.
Este código:
before("login to system", () => { console.log("BEFORE") throw new Error('error'); }) it('testing...', (done) => { console.log("IT") done(); }); after("delete the user", () => { console.log("AFTER") })salida esto:
BEFORE 1) "before all" hook: login to system for "testing..." AFTER 0 passing (14ms) 1 failing 1) States Get "before all" hook: login to system for "testing...": Error: error at Context.<anonymous> (test\index.js:22:11) at processImmediate (node:internal/timers:463:21)También puede consultar esta discusión de github: # 1612 donde aquí dice:
Consulte el ejemplo a continuación, que muestra que after se invoca correctamente después del error beforeEach
El código
// example.js before(function() { console.log('before'); }); after(function() { console.log('after'); }); describe('suite', function() { beforeEach(function() { throw new Error('In beforeEach'); }); afterEach(function() { console.log('afterEach'); }); it('test', function() { // example }); });Y la salida.
// Test run $ mocha example.js before ․afterEach after 0 passing (7ms) 1 failing 1) suite "before each" hook: Error: In beforeEach at Context.<anonymous> (/Users/dstjules/git/mocha/example.js:11:11) at callFn (/usr/local/lib/node_modules/mocha/lib/runnable.js:251:21) at Hook.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:244:7) at next (/usr/local/lib/node_modules/mocha/lib/runner.js:259:10) at Immediate._onImmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:276:5) at processImmediate [as _immediateCallback] (timers.js:358:17)