Javascript “for”循环中的Mocha单元测试和断言

Javascript “for”循环中的Mocha单元测试和断言,javascript,unit-testing,mocha.js,should.js,Javascript,Unit Testing,Mocha.js,Should.js,我正在开发Gulp插件,它允许使用不同于英语的语言编写的保留字来编写JavaScript代码——它的主要工作是翻译,但这不是我要说的 用Mocha和Should.js编写单元测试我注意到我不能像这样使用循环: describe('Proper translating JavaScript PL into JavaScript', function () { var asserts = [ { passed: '(tak || nie) &

我正在开发Gulp插件,它允许使用不同于英语的语言编写的保留字来编写JavaScript代码——它的主要工作是翻译,但这不是我要说的

用Mocha和Should.js编写单元测试我注意到我不能像这样使用
循环:

 describe('Proper translating JavaScript PL into JavaScript', function () {
    var asserts = [
        {
            passed: '(tak || nie) && (prawda || fałsz)',
            expected: '(true || false) && (true || false)'
        },
        {
            passed: 'jeśli (tak) { jeżeli (prawda) {}}',
            expected: 'if (true) { if (true) {}}'
        },
        {
            passed: 'przez (zm i = 1; i <= 3; console.log(i++));',
            expected: 'for (var i = 1; i <= 3; console.log(i++));'
        },
        {
            passed: 'zm sum = funkcja (a, b) { zwróć a + b; };',
            expected: 'var sum = function (a, b) { return a + b; };'
        },
        {
            passed: 'generator snowball() { zm a = 1; dostarcz a++; }',
            expected: 'function* snowball() { var a = 1; yield a++; }'
        },
        {
            passed: 'lol',
            expected: 'zap'
        }
    ];

    for (var i = 0, l = asserts.length; i < l; i++) {
        var assert = asserts[i];
        var desc = 'should turn `' + assert.passed + '` into `' + assert.expected + '`';
        it(desc, function (done) {
            tester(assert.passed, assert.expected, done);
        });
    }
});
这些
应该是不重要的-我一直懒得写这样的东西:

it('should turn `(tak || nie) && (prawda || fałsz)` into `(true || false) && (true || false)`', function (done) {
    tester('(tak || nie) && (prawda || fałsz)', '(true || false) && (true || false)', done);
});
不管怎样,独立断言测试都可以

前5个测试在这两种情况下都成功,这里我们根本不看它们。 我们关注的测试是将这6项放在
断言中的测试

在独立的
it()中进行测试
一切正常。
循环中执行测试时,一个失败导致
断言。长度
失败,另外一个失败导致另一个不可见。

将循环中的代码包装成一个闭包:

for (var i = 0, l = asserts.length; i < l; i++) {
  (function(n) {
    var assert = asserts[n];
    var desc = 'should turn `' + assert.passed + '` into `' + assert.expected + '`';
    it(desc, function (done) {
        tester(assert.passed, assert.expected, done);
    });
  })(i);
}
for(var i=0,l=asserts.length;i
for(var i=0,l=asserts.length;i

  • Javascript 如何有条件地截断文本元素?

  • Javascript 在d3库中的可缩放圆包图中添加边