柴,摩卡:确定应该断言

时间:2012-07-17 17:12:28

标签: mocha should.js chai

我正在使用mochachai作为断言。

我的规范中有几个断言:

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

如果其中一个失败,则mocha会写“预期错误为真”。有没有办法识别它们?

使用expect我可以做到:

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

should可能会出现这种情况吗?

3 个答案:

答案 0 :(得分:5)

显然should目前不支持自定义错误消息。

您可以创建自己的助手来设置消息:

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;
});

答案 1 :(得分:2)

我检查了chai code with respect to should,发现当前接受的答案不正确或不完整。

如果您在那里阅读,您会发现确实有一种方法可以在每个断言中包含您自己的自定义消息。问题是您可能需要更改断言语法以改为使用should函数调用。

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

请注意,如果您使用自己的记者,您的输出可能会有所不同。如果您有这种倾向,可以将should函数包装在断言输出中始终包含行号。

答案 2 :(得分:0)

我想知道他们为什么不简单地添加哪一行解雇了断言,但我自己遇到了同样的问题。一个可以比我注意到的更好的手册的同事有includeStack的设置,它将给出断言的行号。 http://chaijs.com/guide/styles/#configure

由于我正在做很多异步,我可能会在beforebeforeEach中运行我的测试,然后为每个断言运行一个单独的it