me gustaría probar que la función siguiente realiza como se esperaba:¿Cómo puedo probar errores no detectados en mocha?
function throwNextTick(error) {
process.nextTick(function() {
throw error;
});
}
Aquí es mi intento:
describe("throwNextTick", function() {
it("works as expected", function (next) {
var error = new Error("boo!");
var recordedError = null;
process.once("uncaughtException", function (error) {
recordedError = error;
});
throwNextTick(error);
process.nextTick(function() {
recordedError.should.be(error);
next();
});
});
});
Pero moka parece querer mantener ningún tipo de errores a sí mismo, y dejar mi prueba cuando los obtiene:
C:\Users\ddenicola\Programming (Synced)\pubit>mocha test/basicTest.js
throwNextTick
0) works as expected
? 1 of 1 tests failed:
1) throwNextTick works as expected:
Error: boo!
at Test.fn (C:\Users\ddenicola\Programming (Synced)\pubit\test\basicTest.js:11:21)
at Test.run (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:144:15)
at Runner.runTest (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:271:10)
at C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:315:12
at next (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:199:14)
at C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:208:7
at next (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:157:23)
at Array.0 (C:\Users\ddenicola\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:176:5)
at EventEmitter._tickCallback (node.js:192:40)
¿Alguna idea?
Esto hizo el truco! Solo le haré una edición a su respuesta: debe restaurar el oyente original antes de hacer la afirmación, ya que la afirmación arroja un error. – Domenic
Esto realmente debería estar en la documentación de Mocha! Me llevó una hora buscar en Google para encontrar esta respuesta. La captura no documentada de Mocha de errores (y pruebas fallidas), combinada con el hecho de que no se muestra ningún mensaje de error si no arrojas un objeto Error estándar (según los consejos de Crockford), es realmente difícil averiguar por qué la prueba está fallando. –
Parece que en la última versión del nodo (v0.10.5 en el momento de este comentario) 'process.listeners (eventName)' devuelve una copia de la matriz de oyentes, por lo que no se llamará 'pop()' eliminar el oyente del emisor. Necesitará agregar la siguiente línea después del pop: 'process.removeListener ('uncaughtException', originalException);' –