javascript - 是否可以异步定义 Mocha 测试?

标签 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: [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();
    });
});

这是文档:https://mochajs.org/#delayed-root-suite

关于javascript - 是否可以异步定义 Mocha 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51443521/

相关文章:

javascript - 初始化一个数据库时,mongodb Node.js中的remove()和save()是什么意思

java - GWT 客户端中的静态类、方法和字段

javascript - ReceiveMessage 事件显示数据未定义

Javascript 十六进制到 Base32 编码

javascript - 已到达字符串末尾,但未找到右括号 : NodeJS & Jade

javascript - 当必须首先在服务器上生成图像时,将图像异步预加载到浏览器缓存中

javascript - 如何遍历 node.js 中的一系列 promise ?

javascript - Kris Kowal 的设计 promise 文章

javascript - Node typescript 客户端调试

c++ - 使用 boost::async w/o c++11