WHITECOLOR
WHITECOLOR

Reputation: 26122

Chai, Mocha: Identify should assertion

I'm using mocha and chai as assertions.

I have several assertions in my spec:

Exp1.should.be.true
Exp2.should.be.true
Exp3.should.be.true

If one of them fails mocha writes "expected false to be true". Is there a way to identify them?

With expect I can do it:

expect(Exp1, 'Exp1').to.be true

Is something like this possible with should?

Upvotes: 5

Views: 1366

Answers (3)

ty10r
ty10r

Reputation: 121

I checked the chai code with respect to should and found that the currently accepted answer is either incorrect or incomplete.

If you read there, you will find that there is indeed a way to include your own custom message in each assertion. The catch is that you may need to change your assertion syntaxes to use should's function calls instead.

(1).should.equal(0, 'This should fail');
/****** Output with (I believe) default reporter *****
 * This should fail
 * + expected - actual
 *
 *  -1
 *  +0
 */

Note that your output may look different if you are using your own reporter. If you feel so inclined, you could probably wrap should's functions to always include line number in your assertion output.

Upvotes: 2

Bryan
Bryan

Reputation: 460

I wonder why they don't simply add which line fired the assertion, but I ran into this exact same problem myself. A colleague who can manuals better than I noted there is a setting for includeStack which will give line numbers for assertions. http://chaijs.com/guide/styles/#configure

Since I'm doing a lot of async, I might run my tests in before or beforeEach and then run a separate it for each assertion.

Upvotes: 0

Miroslav Bajtoš
Miroslav Bajtoš

Reputation: 10785

Apparently should does not support custom error messages at the moment.

You can create your own helper for setting the message:

var chai = require('chai'),
    should = chai.should();

// Helper definition - should be in a shared file
chai.use(function(_chai, utils) {
  _chai.Assertion.addMethod('withMessage', function(msg) {
    utils.flag(this, 'message', msg);
  });
});

// Sample usage
it('should fail', function() {
  var Exp1 = false;
  var Exp2 = false;
  Exp1.should.be.withMessage('Exp1').true;
  Exp1.should.withMessage('Exp2').be.true;
});

Upvotes: 5

Related Questions