0

I'm using Mocha and Chai as a Javascript testing suite.

I want to catch a 'RangeError: Maximum call stack size exceeded' failure on on of my tests.

JS

function isEven(num){
   if (num === 0) {
      return true;
   } else if (num === 1) {
      return false;
   } else {
      return isEven(num - 2);
  }
}

// Example Call
isEven(-10); //Throws the error 'call stack'

I've been using .throw but with no luck

expect(isEven(-1)).to.throw(ReferenceError, 'RangeError: Maximum call stack size exceeded');

or

expect(isEven(-1)).to.throw(err);

Not having an success with either.

I'm getting the following error in the terminal

npm ERR! Test failed.  See above for more details.

the above details show RangeError: Maximum call stack size exceeded

Any help much appreciated

fidev
  • 1,222
  • 2
  • 21
  • 51

1 Answers1

2

expect(...).to.throw() requires a function (so Chai can run that function and catch any errors). You're passing it the result of a function (or at least trying to).

Try this:

expect(isEven.bind(null, -10)).to.throw(RangeError);

Which is somewhat similar to this:

function toTest() {
  isEven(-10);
}
expect(toTest).to.throw(RangeError);
robertklep
  • 198,204
  • 35
  • 394
  • 381