Skip to content

Instantly share code, notes, and snippets.

@rinatio
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rinatio/cf2fb1fdd501c6ee206f to your computer and use it in GitHub Desktop.
Save rinatio/cf2fb1fdd501c6ee206f to your computer and use it in GitHub Desktop.
AngularJS $q resolved
angular.module('testQDecorator', [])
.config(function($provide) {
$provide.decorator('$q', function($delegate) {
function decoratePromise(promise) {
promise.resolved = false;
promise.finally(function() {
promise.resolved = true;
});
return promise;
}
var defer = $delegate.defer,
when = $delegate.when,
reject = $delegate.reject,
all = $delegate.all;
$delegate.defer = function() {
var deferred = defer();
decoratePromise(deferred.promise);
return deferred;
};
$delegate.when = function() {
var p = when.apply(this, arguments);
return decoratePromise(p);
};
$delegate.reject = function() {
var p = reject.apply(this, arguments);
return decoratePromise(p);
};
$delegate.all = function() {
var p = all.apply(this, arguments);
return decoratePromise(p);
};
return $delegate;
});
}).run([function() {}]);
describe('Promise resolved test', function() {
beforeEach(module('testQDecorator'));
var $http,
$httpBackend,
$rootScope,
$q;
beforeEach(inject(function($injector) {
$http = $injector.get('$http');
$httpBackend = $injector.get('$httpBackend');
$q = $injector.get('$q');
$rootScope = $injector.get('$rootScope');
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('$q promises should have resolved property', function() {
var deferred = $q.defer(),
p = deferred.promise;
expect(p.resolved).toBe(false);
deferred.resolve(true);
$rootScope.$apply();
expect(p.resolved).toBe(true);
});
it('$http promises should have resolved property', function() { // This test fails
var p;
$httpBackend.expectPOST('/test/1').respond(200);
p = $http({
method: 'post',
url: '/test/1'
});
expect(p.resolved).toBe(false);
$httpBackend.flush();
expect(p.resolved).toBe(true);
});
it('$http.then() should have resolved property', function() { // This test fails
var p;
$httpBackend.expectPOST('/test/1').respond(200);
p = $http({
method: 'post',
url: '/test/1'
}).then(function() {});
expect(p.resolved).toBe(false);
$httpBackend.flush();
expect(p.resolved).toBe(true);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment