如何在mocha中提供失败断言的上下文

时间:2015-12-04 08:13:48

标签: javascript dynamic mocha

如果我将mocha.js与dynamically generated tests一起使用,那么当测试失败时如何打印出变量值的上下文?

如果我们从mocha.js文档中获取该示例,

var assert = require('assert');

function add() {
  return Array.prototype.slice.call(arguments).reduce(function(prev, curr) {
    return prev + curr;
  }, 0);
}

describe('add()', function() {
  var tests = [
    {args: [1, 2],       expected: 3},
    {args: [1, 2, 3],    expected: 6},
    {args: [1, 2, 3, 4], expected: 10}
  ];

  tests.forEach(function(test) {
    it('correctly adds ' + test.args.length + ' args', function() {
      var res = add.apply(null, test.args);
      assert.equal(res, test.expected);
    });
  });
});

那么如果第二次测试失败,如何打印{args: [1, 2, 3], expected: 6},

2 个答案:

答案 0 :(得分:1)

您可以将其他注释作为assert方法

的第三个参数传递
  tests.forEach(function(test) {
    it('correctly adds ' + test.args.length + ' args', function() {
      var res = add.apply(null, test.args);
      assert.equal(res, test.expected, JSON.stringify(test)); // third argument passed
    });
  });

将产生如下输出:

1) add() correctly adds 3 args:

  AssertionError: {"args":[1,2,3],"expected":8}
  + expected - actual

  -6
  +8

答案 1 :(得分:1)

您可以向assert.XYZ方法添加一个额外的参数message,这些方法将在断言失败时输出。您可以在那里添加所需的输出

tests.forEach(function(test) {
    it('correctly adds ' + test.args.length + ' args', function() {
        var res = add.apply(null, test.args);
        assert.equal(res, test.expected, "Failed with data " + JSON.stringify(test));
    });
});