5

我使用mochaandchai作为断言。

我的规范中有几个断言:

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

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

expect可以做到:

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

这样的事情可能should吗?

4

3 回答 3

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;
});
于 2013-06-17T09:14:42.563 回答
2

我检查了关于 should 的 chai 代码,发现当前接受的答案不正确或不完整。

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

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

请注意,如果您使用自己的报告器,您的输出可能会有所不同。如果您愿意,您可能可以将 wrapshould的函数包装为始终在断言输出中包含行号。

于 2017-04-25T16:48:45.390 回答
0

我想知道为什么他们不简单地添加触发断言的行,但我自己也遇到了同样的问题。一位可以比我更好地手动操作的同事注意到有一个设置includeStack将为断言提供行号。 http://chaijs.com/guide/styles/#configure

因为我做了很多异步,我可能会运行我的测试,before或者beforeEach然后it为每个断言单独运行。

于 2015-07-15T22:49:39.967 回答