Home > Article > Web Front-end > Why is Mocha\'s expect.to.throw Failing to Catch My Expected Errors?
Trouble with Mocha's expect.to.throw Missing Thrown Errors
When utilizing Chai's expect.to.throw to test for exceptions in your Node.js application, you may encounter unexpected results. If the test fails due to an uncaught error, but wrapping the test in try...catch and asserting the caught error succeeds, you might question the functionality of expect.to.throw.
The crux of the issue lies in the way expect.to.throw operates. To effectively test the occurrence of an exception, it requires a function as input. By passing a function to expect, it can invoke that function and verify if an exception is raised.
In the provided code snippet, you're directly passing the result of model.get('z') to expect. However, this approach passes the function's return value instead of the function itself. To rectify this, you need to supply expect with a function that executes model.get when called.
Updated Code:
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.'));
By employing the bind method, a fresh function is created. When invoked, it calls model.get with the specified arguments, thereby simulating the execution of model.get('z'). This allows expect.to.throw to evaluate whether an exception is thrown during the function execution.
The above is the detailed content of Why is Mocha\'s expect.to.throw Failing to Catch My Expected Errors?. For more information, please follow other related articles on the PHP Chinese website!