Testing JS exceptions with Mocha/Chai

30,789

Solution 1

It's probably because you are executing the function right away, so the test framework cannot handle the error.

Try something like:

chai.expect(manager.test.bind(manager)).to.throw('Oh no')

If you know that you aren't using the this keyword inside the function I guess you could also just pass manager.test without binding it.

Also, your test name doesn't reflect what the code does. If it doesn't permet the construction of new instances, manager = new window.VisualizationsManager should fail.

Solution 2

Either pass the function:

chai.expect(manager.test).to.throw('Oh no');

Or use an anonymous function:

chai.expect(() => manager.test()).to.throw('Oh no');

See the documentation on the throw method to learn more.

Share:
30,789
TheDelChop
Author by

TheDelChop

I am the lead developer of RentingSmart.com, a great way to manage all of your property needs! I enjoy hacking on Ruby, C++ and Javascript, with a lot of interest in crafting clean code in the tradition of Uncle Bob Martin. Tools I'm using right now: Ruby on Rails Redis Postgresql Coffeescript Ember.js

Updated on February 03, 2020

Comments

  • TheDelChop
    TheDelChop over 4 years

    Trying to test some code that throws an exception with Mocha/Chai, but having no luck, here's the simple code I'm trying to test:

    class window.VisualizationsManager
    
      test: ->
        throw(new Error 'Oh no')
    

    Here is my test:

    describe 'VisualizationsManager', ->
    
      it 'does not permit the construction of new instances', ->
    
        manager = new window.VisualizationsManager
    
        chai.expect(manager.test()).to.throw('Oh no')
    

    However, when I run the spec, the test fails and throws the exception.

    Failure/Error: Oh no
    

    what am I doing wrong here?