Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以异步定义mocha测试?_Javascript_Node.js_Asynchronous_Testing_Mocha.js - Fatal编程技术网

Javascript 是否可以异步定义mocha测试?

Javascript 是否可以异步定义mocha测试?,javascript,node.js,asynchronous,testing,mocha.js,Javascript,Node.js,Asynchronous,Testing,Mocha.js,正如mocha文档中指出的,可以动态生成测试: 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:

正如mocha文档中指出的,可以动态生成测试:

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);
    });
  });
});
我遇到的问题是,我想根据异步函数的结果生成测试。大概是这样的:

describe('add()', function() {
  asyncFunctionThatReturnsAPromise()
    .then(tests => {
      tests.forEach(function(test) {
        it('correctly adds ' + test.args.length + ' args', function() {
          var res = add.apply(null, test.args);
          assert.equal(res, test.expected);
        });
      });
    });
});
然而,当执行时,结果是0个测试用例


不支持异步定义测试,还是有办法做到这一点?

我刚刚找到了方法。如果您使用
--delay
标志执行mocha,则将在全局范围中定义
run()
,并且在调用
run()
之前,您的测试套件将不会执行。下面是一个例子:

describe('add()', function() {
  asyncFunctionThatReturnsAPromise()
    .then(tests => {
      tests.forEach(function(test) {
        it('correctly adds ' + test.args.length + ' args', function() {
          var res = add.apply(null, test.args);
          assert.equal(res, test.expected);
        });
      });
      run();
    });
});
以下是文档: