作为承诺文档的 Chai 声明如下:
注意 :return或notify(done)必须与promise断言一起使用。
该站点上的示例如下:
return doSomethingAsync().should.eventually.equal("foo"); doSomethingAsync().should.eventually.equal("foo").notify(done);
事情是; 我实际上按照承诺的方法使用chai编写了一个测试,而没有返回承诺。像这样:
it('should resolve user', function () {
$state.get(state).resolve.user(dataservice, {
userId: testUser.id
}).should.eventually.eq(testUser);
$rootScope.$apply();
});
而且效果很好。我可以肯定,因为我将testUser更改为其他测试失败。就像我期望的那样。因此,我不确定在这里是否做错了什么。
实际上,当我修改代码以返回诺言时,它失败,并显示错误“错误:超时超过2000毫秒。请确保在此测试中调用了done()回调”。修改后的代码如下:
it('should resolve user', function () {
var promise = $state.get(state).resolve.user(dataservice, {
userId: testUser.id
}).should.eventually.eq(testUser);
$rootScope.$apply();
return promise;
});
这里有些困惑。它可能与Angular $ q有关。为了明确起见,函数resolve.user返回$ q承诺。
在上述情况下,摩卡链$rootScope.$apply()
被调用后返回了保证,因此链式then
需要另一个$rootScope.$apply()
执行。没有这个,承诺链的其余部分将不会执行,并导致超时。
Mocha规范中的返回承诺旨在用于异步规范,这对于测试非角度承诺是必需的。$q
承诺是同步的,并且与Angular摘要相关。
如图所示这里,chai-as-promised
可以进行修改,以支持$q
承诺,并申请$rootScope.$apply()
自动断言承诺:
chaiAsPromised.transferPromiseness = function (assertion, promise) {
assertion.then = promise.then.bind(promise);
if (!('$$state' in promise))
return;
inject(function ($rootScope) {
if (!$rootScope.$$phase)
$rootScope.$digest();
});
};
考虑以下代码: 这是我得到的输出: 但是如果我把代码改成这样: 我会得到这个: 我很困惑,因为根据文档,应该暂停执行,直到promise得到解决。在这种情况下,第一个示例应该以数组的形式返回
和should接口都利用链接来构造类似英语的句子来描述测试。 一旦你决定了一个风格,你应该保持这种风格为所有其他测试。 每种风格都有自己独特的语法; 请参阅该 。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise 当.then()缺少返回promise对象的适当函数时,处理将继续到链的下一个链接。因此,链可以安全地忽略每个HandlerRejection,直到final.catch()。类似地,.catch()实际上只是一个.the
我有一个包含100个promise的promise数组。我想等待,直到一个promise以真实的价值实现。另外,我想确保只有x个promise同时运行(设置限制)。 我已经研究了像和这样的方法,但是它们没有并发选项。 我该怎么做呢?
问题内容: 我真的需要做mysql_close()吗?为什么或者为什么不? 即使我不执行mysql_close,也有触发器会在mysql_connect之后关闭链接吗? 问题答案: 在大多数情况下,调用不会对性能产生任何影响。但是,关闭程序不再使用的资源(文件句柄,打开的套接字,数据库连接等)始终是一个好习惯。 如果您正在做可能要花费几秒钟的操作,例如从REST API读取和解析数据,则尤其如此。
我在Eclipse中通过Android JUnit测试测试一个使用android-support-v7-appcompat中的ActionBarActivity的应用程序时遇到了一个问题。当在模拟器或设备中运行时,一切似乎都很好。 我做错了什么? 这是我得到的错误(从Junit-Window获得的失败跟踪): HelloWorldActivity.java