Mocha / Chai expect.to.throw not catching thrown errors Mocha / Chai expect.to.throw not catching thrown errors javascript javascript

Mocha / Chai expect.to.throw not catching thrown errors


You have to pass a function to expect. Like this:

expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.');expect(model.get.bind(model, 'z')).to.throw(new Error('Property does not exist in model schema.'));

The way you are doing it, you are passing to expect the result of calling model.get('z'). But to test whether something is thrown, you have to pass a function to expect, which expect will call itself. The bind method used above creates a new function which when called will call model.get with this set to the value of model and the first argument set to 'z'.

A good explanation of bind can be found here.


As this answer says, you can also just wrap your code in an anonymous function like this:

expect(function(){    model.get('z');}).to.throw('Property does not exist in model schema.');


And if you are already using ES6/ES2015 then you can also use an arrow function. It is basically the same as using a normal anonymous function but shorter.

expect(() => model.get('z')).to.throw('Property does not exist in model schema.');