【发布时间】:2017-12-18 06:36:12
【问题描述】:
我最近遇到了一个奇怪的行为。我有一个包含大量测试的大项目,其中一些测试是以同步方式编写的,假设 Promise 库是没有deferred 的库。
但是,在我的机器上准备好环境之后(Mac OS X,nodeJS 0.12.18 - 我知道 :( ),测试似乎以不同的承诺实现运行 - 这次使用延迟的异步版本,因此以下测试失败:
// Some generic mocking code here
instance.doSomething(); // This returns a promise
// Immediately after the previous call, we check the results and clean mocks
sinon.assert.called(request.Request);
request.Request.restore();
这样重写后开始工作:
return instance.doSomething().then(function() {
sinon.assert.called(request.Request);
request.Request.restore();
});
综上所述,instance.doSomething 执行了两个请求。
如果同步调用 Promise,request mock 会在 两个调用之后恢复。如果 promise 被异步调用,第一次调用成功但第二次调用失败,同时存根被恢复(在第二次调用之前)。
我的问题是:
- 有没有可能在我的机器和 CI 上,Mocha 使用不同的 Promise 实现?
- 有没有办法强制 Mocha 实现承诺?
- 也许更改后的 Promise 来自代码中的其他地方?
所有这一切看起来都很奇怪,尤其是代码使用bluebird 作为主要的 Promise 库...
【问题讨论】:
标签: node.js testing promise mocha.js bluebird