Elm*_*mer 6 unit-testing promise jasmine angularjs q
我有以下茉莉花测试:
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();
});
}));
Run Code Online (Sandbox Code Playgroud)
我认为$ rootScope.$ apply应该解决所有未完成的承诺,但不知怎的,它不会在这个测试中发生.
如何在这样的测试中触发promise解析?请帮忙!
mus*_*_ut 12
$rootScope.$apply()
在你的情况下,我认为这个问题太快了.这应该工作:
function getPromise(){
var deferred = $q.defer();
setTimeout(function(){
deferred.resolve(true);
$rootScope.$apply();
}, 1000);
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
更新
您可以注入模拟$timeout
服务并解决明确使用的承诺$timeout.flush()
.
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();
// ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5624 次 |
最近记录: |