柴如許documentation狀態如下:在使用Chai作爲承諾時,我是否真的需要返回測試承諾?
Notice: either return or notify(done) must be used with promise assertions.
,並在網站上的例子如下:
return doSomethingAsync().should.eventually.equal("foo"); doSomethingAsync().should.eventually.equal("foo").notify(done);
的東西是;我實際上是按照承諾寫了一個測試,但沒有返回諾言。像這樣:
it('should resolve user', function() {
$state.get(state).resolve.user(dataservice, {
userId: testUser.id
}).should.eventually.eq(testUser);
$rootScope.$apply();
});
它工作得很好。我確信它會在測試失敗時將testUser更改爲其他內容。就像我預料的一樣。所以我不確定我在這裏做錯了什麼。
事實上,當我修改代碼以返回一個承諾時,它失敗了,出現錯誤「錯誤:超過2000ms的超時時間,確保在此測試中調用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 promise。
不,你不應該。請參閱[this](http://stackoverflow.com/a/37374041/3731501)。 – estus
'user(dataService,{...})'是否同步工作? (即它是否立即返回?) –
@AtesGoral它工作異步。 – Bren