Mocha/Should.js 使用异步函数

Mocha/Should.js using asynchronous function

我是 JavaScript 测试框架的新手。我想做一些优化,但我 运行 遇到了一些问题。该项目正在使用 should.js

这是我的原始测试用例的简化版本:

describe('Simple', function() {
  describe('Test', function() {
    it('should do something', function(done) {
      somePromise.then(function(data) {
        data.should.above(100);
        done();
      });
    }

    it('should do something else but alike', function(done) {
      somePromise.then(function(data) {
        data.should.above(100);
        done();
      });
    }

  }
});

我正在尝试这样做:

var testFunc = function(data) {
  it('should do something', function(done) {
      data.should.above(100);
      done();
  });
}

describe('Simple', function() {
  describe('Test', function() {
      somePromise.then(function(data) {
        testFunc(data);
      });

      somePromise.then(function(data) {
        testFunc(data);
      });
  }
});

承诺是异步的,也许这就是我的 "optimization" 不起作用的原因?我在文档中没有找到 describe 函数的 "done" 回调。

提前致谢!任何帮助将不胜感激!

您的示例不起作用

用不同的断言测试相同的承诺

要使用多个断言测试单个承诺,您只需在测试开始时创建承诺,然后在 it 块中使用它,如下所示:

describe('A module', function() {
    var promise;

    before(function () {
        promise = createPromise();
    });

    it('should do something', function() {
        return promise.then(function (value) {
            value.should.be.above(100);
        });
    });

    it('should do something else', function() {
        return promise.then(function (value) {
            value.should.be.below(200);
        });
    });
});

请注意,如果承诺是从 API 调用中 return 编辑的,则调用只会进行一次。 The result is simply cached in the promise for the two test cases.

这也利用了 you can return promises from test cases 而不是使用完成回调这一事实。如果承诺被拒绝或者 then() 调用中的任何断言失败,则测试用例将失败。

用相同的断言测试不同的承诺

假设您想使用相同的断言测试不同的承诺,您可以将一个函数传递给 testFunc 以创建要测试的承诺。

var testFunc = function(promiseFactory) {
  it('should do something', function(done) {
      promiseFactory().then(function(data) {
          data.should.above(100);
          done();
      });
  });
}

describe('Simple', function() {
  describe('Test', function() {
      testFunc(function () { return createSomePromise(); });

      testFunc(function () { return createSomeOtherPromise(); });
  });
});

这是有效的,因为 Mocha 的 it 函数 运行 紧接在 describe 块内。当测试用例实际上是 运行.

时,然后使用 promiseFactory 回调创建承诺

您也可以 return promises from test cases 您可以将 testFunc 更改为 return 像这样的断言作为承诺:

var testFunc = function(promiseFactory) {
  it('should do something', function() {
      return promiseFactory().should.eventually.be.above(100);
  });
}