This test case shows different ways to use $q.defer()
and
resolve()
.
'use strict';
describe('how to test with promises', function () {
var deferred, $rootScope;
beforeEach(function () {
inject(function ($q, _$rootScope_) {
$rootScope = _$rootScope_;
deferred = $q.defer();
});
});
it('does a thing one way', function () {
deferred.promise.then(function (value) {
expect(value).toBe(10);
});
deferred.resolve(10);
$rootScope.$digest();
});
it('does a thing another way', function () {
var handler = jasmine.createSpy('success');
deferred.promise.then(handler);
deferred.resolve(4);
$rootScope.$digest();
expect(handler).toHaveBeenCalledWith(4);
});
it('does a thing one way', function() {
var value;
deferred.promise.then(function(_value_) {
value = _value_;
});
deferred.resolve(10);
expect(value).not.toBe(10); // not yet 10 because
// $digest hasn't run
$rootScope.$digest();
expect(value).toBe(10); // 10 because $digest
// already ran
});
});