У меня есть следующий жасминовый тест:
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 должен разрешать все невыполненные промисы, но почему-то в этом тесте этого не происходит.
Как запустить выполнение промисов в таком тесте? пожалуйста помоги!
$digest
. - person musically_ut   schedule 01.12.2013$scope.$apply
, а не$timeout
? Я удалю это из решения, если это не так. - person musically_ut   schedule 02.12.2013$timeout
издевается надngMock
(дох!), и нужно явно вызвать$timeout.flush()
: plnkr.co /edit/Bdh78ZiArbO8vau9ByVJ?p=preview - person musically_ut   schedule 02.12.2013