Why is my mocha/chai Error throwing test failing?

11,368

Solution 1

This should fix your problem:

var expect = require('chai').expect;

Notice that the expect function is not being invoked.

Solution 2

Tracked it down!

Up the top

expect = require('chai').expect(),

wasn't giving me anything useful. Changing it to:

chai = require('chai'),

then calling the test as

chai.expect(fn).to.throw(ReferenceError);

does exactly what I expected.

Thanks for the help.

Share:
11,368
Khrob
Author by

Khrob

Part of the iPhone crew at Melbourne's premiere enterprise iOS house - Intunity

Updated on June 30, 2022

Comments

  • Khrob
    Khrob almost 2 years

    I have a simple javascript package I'm trying to test. I want to check for an Error being thrown, but when my test is run, and the error is thrown, the test is marked as failing.

    Here's the code:

    var should = require('chai').should(),
        expect = require('chai').expect();
    
    describe('#myTestSuite', function () {
    
        it ('should check for TypeErrors', function () {
    
            // Pulled straight from the 'throw' section of
            // http://chaijs.com/api/bdd/
            var err = new ReferenceError('This is a bad function.');
            var fn = function () { throw err; }
            expect(fn).to.throw(ReferenceError);
    
        })
    
    })
    

    Which, when run gives me the following output:

    kh:testthing khrob$ npm test
    
    > [email protected] test /Users/khrob/testthing
    > mocha
    
    
    
      #myTestSuite
        1) should check for TypeErrors
    
    
      0 passing (5ms)   1 failing
    
      1) #myTestSuite should check for TypeErrors:
         TypeError: object is not a function
          at Context.<anonymous> (/Users/khrob/testthing/test/index.js:10:3)
          at callFn (/Users/khrob/testthing/node_modules/mocha/lib/runnable.js:249:21)
          at Test.Runnable.run (/Users/khrob/testthing/node_modules/mocha/lib/runnable.js:242:7)
          at Runner.runTest (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:373:10)
          at /Users/khrob/testthing/node_modules/mocha/lib/runner.js:451:12
          at next (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:298:14)
          at /Users/khrob/testthing/node_modules/mocha/lib/runner.js:308:7
          at next (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:246:23)
          at Object._onImmediate (/Users/khrob/testthing/node_modules/mocha/lib/runner.js:275:5)
          at processImmediate [as _immediateCallback] (timers.js:336:15)
    
    
    
    npm ERR! Test failed.  See above for more details. 
    npm ERR! not ok code 0
    

    I know there's dozens of answers on here about what you pass to expect() being a function not the result of a function, and I've tried every permutation of anonymous functionizing I can think of, but I always get the failed test result.

    I'm thinking it must be something to do with my config, given that I'm basically just running the example from the documentation, or my expectation for what is a pass or fail on the test is not calibrated properly.

    Any clues?