[英]Angular promise not resolving in jasmine
我有以下茉莉花測試:
it('should resolve promise', inject(function ($q, $rootScope) {
function getPromise(){
var deferred = $q.defer();
setTimeout(function(){
deferred.resolve(true);
}, 1000);
return deferred.promise;
}
var p = getPromise();
var cb = jasmine.createSpy();
runs(function(){
expect(cb).not.toHaveBeenCalled();
p.then(cb);
$rootScope.$apply();
});
waitsFor(function(){
return cb.callCount == 1;
});
runs(function(){
expect(cb).toHaveBeenCalled();
$rootScope.$apply();
});
}));
我認為$ rootScope。$ apply應該解決所有未完成的承諾,但不知怎的,它不會在這個測試中發生。
如何在這樣的測試中觸發promise解析? 請幫忙!
我認為$rootScope.$apply()
在你的情況下很快被調用。 這應該工作:
function getPromise(){
var deferred = $q.defer();
setTimeout(function(){
deferred.resolve(true);
$rootScope.$apply();
}, 1000);
return deferred.promise;
}
更新
您可以注入模擬$timeout
服務並使用$timeout.flush()
顯式解析promise。
it('should resolve promise', inject(function ($q, $timeout, $rootScope) {
function getPromise(){
var deferred = $q.defer();
$timeout(function(){
deferred.resolve(true);
}, 1000);
return deferred.promise;
}
// ...
$timeout.flush();
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.