6

I've got an error thrown like so:

if (somethingBadHappened) {
    throw new Error('what were you thinking, batman?')
}

Now I want to write a test to check that this throws when expected:

should(MyClass.methodThatShouldThrow()).throws('what were you thinking, batman?')

But that actually throws the error. What am I doing wrong? Should.js docs are pretty light, since it inherits from assert.throws, but even the docs for that doesn't work in the 'should.js' way?

brandonscript
  • 68,675
  • 32
  • 163
  • 220

1 Answers1

13

As you had found out, your code execute the function which throws the error & should doesn't get a chance to catch it.

To allow proper assertion, you need to wrap the function call in an anonymous function.

should(function ()  {MyClass.methodThatShouldThrow();} ).throw('what were you thinking, batman?')
brandonscript
  • 68,675
  • 32
  • 163
  • 220
DJ.
  • 6,664
  • 1
  • 33
  • 48