我使用的是摩卡测试返回一个承诺异步函数。
什么是测试该承诺解析为正确的价值的最佳方式是什么?
我使用的是摩卡测试返回一个承诺异步函数。
什么是测试该承诺解析为正确的价值的最佳方式是什么?
摩卡内置了承诺支持为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
关键字!
然后“返回”,这可以用来处理错误的承诺。 大多数图书馆支持调用的方法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'