Teniendo en cuenta este código:¿La afirmación del nodo está completamente rota?
var assert = require('assert');
function boom(){
throw new Error('BOOM');
}
assert.throws(boom(), Error);
consigo esta salida, con el nodo 0.4.9:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: BOOM
at boom ([EDITED]/assert.throws.test.js:4:9)
at Object.<anonymous> ([EDITED]/assert.throws.test.js:7:17)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)
at EventEmitter._tickCallback (node.js:126:26)
Esto, para mí, significa que se ha producido una excepción no capturada, a diferencia de un comunicado, atrapado excepción. Buscando en la documentación, noto que los ejemplos se parecen más a esto:
var assert = require('assert');
function boom(){
throw new Error('BOOM');
}
assert.throws(boom, Error);
Pero ¿Cómo se prueba si se produce una excepción dada una cierta entrada? Por ejemplo:
var assert = require('assert');
function boom(blowup){
if(blowup)
throw new Error('BOOM');
}
assert.throws(boom, Error);
Esto no funcionará. ¿Qué estoy haciendo mal o qué secreto conocen todos excepto yo?
Esto es lo que demuestra mi segundo ejemplo. Esto tiene sentido, porque necesita llamar a la función de prueba en un entorno controlado. Pero, ¿y si la función requiere entrada para lanzar una excepción, como mi tercer ejemplo? – Andrew
Bueno, haz lo que javascript es bueno en: creando nuevas funciones, como en mi edición –
Ah, ahora entiendo. ¡Gracias! – Andrew