Dynamically Generating Tests

优质
小牛编辑
133浏览
2023-12-01

鉴于Mocha使用Function.prototype.call和函数表达式来定义套件和测试用例,因此可以直接动态生成测试。不需要特殊的语法 - 普通的'JavaScript'可用于实现类似于“参数化”测试的功能,您可能已经在其他框架中看到过。

请看以下示例:

var assert = require('chai').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);
  });
});
});

上面的代码将生成一个包含三个规范的套件:

$ mocha
add()
  ✓ correctly adds 2 args
  ✓ correctly adds 3 args
  ✓ correctly adds 4 args