Given this code:
var assert = require('assert'); function boom(){ throw new Error('BOOM'); } assert.throws( boom(), Error );
I get this output, with node 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)
This, to me, implies that an uncaught exception has occurred, as opposed to a reported, caught exception. Looking in the docs, I notice that the examples look more like this:
var assert = require('assert'); function boom(){ throw new Error('BOOM'); } assert.throws( boom, Error );
But how do you test if it throws an exception given a certain input? For example:
var assert = require('assert'); function boom(blowup){ if(blowup) throw new Error('BOOM'); } assert.throws( boom, Error );
This will fail. What am I doing wrong, or what secret does everybody know but me?
The assert. throws() is used when the code throws an exception based on a specific circumstances, to catch the error object for testing and comparison.
As with many other programming languages, Node. js comes with an assert class as part of its core modules set, allowing simple assertion tests to be performed. When such an assertion fails an AssertionError is thrown to indicate what went wrong.
The examples take a function, while your sample code calls a function and passes the result. The exception happens before the assert even gets to look at it.
Change your code to this:
var assert = require('assert'); function boom(){ throw new Error('BOOM'); } assert.throws( boom, Error ); // note no parentheses
EDIT: To pass parameters, just make another function. After all, this is javascript!
var assert = require('assert'); function boom(blowup){ if(blowup) throw new Error('BOOM'); } assert.throws( function() { boom(true); }, Error );
You can use bind():
assert.throws( boom.bind(null), Error );
With arguments it is:
assert.throws( boom.bind(null, "This is a blowup"), Error );
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With