I have the following jasmine test:
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();
});
}));
I thought $rootScope.$apply was supposed to resolve all outstanding promises, but somehow it does not happen in this test.
How do i trigger promise resolving in a test like this? please help!
$digestloop.$scope.$applywork and not$timeout? I'll remove it from the solution if it didn't.$timeoutservice is mocked byngMock(Doh!) and one explicitly needs to call$timeout.flush(): plnkr.co/edit/Bdh78ZiArbO8vau9ByVJ?p=preview