在摩卡上循环()

时间:2018-04-04 14:35:17

标签: javascript mocha chai

我想用mocha迭代几套测试文件,但我的it()永远不会执行。

var unitTests = JSON.parse(fs.readFileSync('./test/unitTests.json', 'utf8'));
for (test in unitTests.unitTests) {
  var inputFilename = unitTests.unitTests[test].input;
  console.log(inputFilename);

  it('do stuff with the file', function(done) {
      ...
  });
}

我的console.log语句会打印每个输入文件名,但it()中的代码永远不会执行。如果我注释掉循环,它运行得很好。

似乎我在这里有一个不正确的假设...

如何在mocha中查看it()?

事实证明我原来的问题是错误的。

我在调试器中运行它,我看到在执行it()块之前执行console.log语句。然后我退出了该计划。如果我让它运行我的it()块按预期运行。

看起来it()的异步性质让我感到沮丧。

1 个答案:

答案 0 :(得分:1)

始终将测试包装在describe块中:

const fs = require('fs');
var unitTests = JSON.parse(fs.readFileSync('./test/unitTests.json', 'utf8'));

function doStuff(test) {console.log("did stuff with " + test.input)}

describe('runTests', function() {
  unitTests.unitTests.forEach(function(test) {
    it('does stuff with ' + test.input, function(done) {
      var res = doStuff.apply(null, [test]);
      done();
    });
  });
});

./node_modules/.bin/mocha test.js

的输出
  runTests
did stuff with 1.foo
    ✓ does stuff with 1.foo
did stuff with 4.foo
    ✓ does stuff with 4.foo
did stuff with 3.foo
    ✓ does stuff with 3.foo
did stuff with 2.foo
    ✓ does stuff with 2.foo


  4 passing (8ms)

更多信息:https://mochajs.org/#dynamically-generating-tests

PS。我用unitTests.json播种了

{"unitTests": [{"input": "1.foo"},{"input": "4.foo"},{"input": "3.foo"},{"input": "2.foo"}]}