如何测试与摩卡的承诺(How to test promises with Mocha)

2019-07-20 11:45发布

我使用的是摩卡测试返回一个承诺异步函数。

什么是测试该承诺解析为正确的价值的最佳方式是什么?

Answer 1:

摩卡内置了承诺支持为1.18.0版本(2014年3月)。 您可以返回从测试情况下的承诺,摩卡会等待它:

it('does something asynchronous', function() { // note: no `done` argument
  return getSomePromise().then(function(value) {
    expect(value).to.equal('foo');
  });
});

不要忘了return在第二行关键字。 如果你不小心忽略它,摩卡会假设你的测试是同步的,它不会等待.then功能,让您的测试总是通过,即使断言失败。


如果过于重复,你可能需要使用柴作为许诺的图书馆,它给你的eventually性质更方便地测试承诺:

it('does something asynchronous', function() {
  return expect(getSomePromise()).to.eventually.equal('foo');
});

it('fails asynchronously', function() {
  return expect(getAnotherPromise()).to.be.rejectedWith(Error, /some message/);
});

再次,不要忘记return关键字!



Answer 2:

然后“返回”,这可以用来处理错误的承诺。 大多数图书馆支持调用的方法done ,这将确保任何未处理错误抛出。

it('does something asynchronous', function (done) {
  getSomePromise()
    .then(function (value) {
      value.should.equal('foo')
    })
    .done(() => done(), done);
});

您也可以使用类似摩卡作为许诺的 (也有其他的测试框架类似的库)。 如果您正在运行服务器端:

npm install mocha-as-promised

然后,在你的脚本的开头:

require("mocha-as-promised")();

如果你正在运行的客户端:

<script src="mocha-as-promised.js"></script>

然后你的测试里面,你可以只返回承诺:

it('does something asynchronous', function () {
  return getSomePromise()
    .then(function (value) {
      value.should.equal('foo')
    });
});

或在咖啡脚本(按你原来的例子)

it 'does something asynchronous', () ->
  getSomePromise().then (value) =>
    value.should.equal 'foo'


文章来源: How to test promises with Mocha