fix($http): allow empty responses to be cached

Closes #3809
This commit is contained in:
jankuca 2013-08-29 18:52:30 -07:00 committed by Igor Minar
parent 44ad61e56c
commit 8e48c4ff6a
2 changed files with 16 additions and 2 deletions

View file

@ -892,7 +892,7 @@ function $HttpProvider() {
if (cache) { if (cache) {
cachedResp = cache.get(url); cachedResp = cache.get(url);
if (cachedResp) { if (isDefined(cachedResp)) {
if (cachedResp.then) { if (cachedResp.then) {
// cached request has already been sent, but there is no response yet // cached request has already been sent, but there is no response yet
cachedResp.then(removePendingReq, removePendingReq); cachedResp.then(removePendingReq, removePendingReq);
@ -912,7 +912,7 @@ function $HttpProvider() {
} }
// if we won't have the response in cache, send the request to the backend // if we won't have the response in cache, send the request to the backend
if (!cachedResp) { if (isUndefined(cachedResp)) {
$httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
config.withCredentials, config.responseType); config.withCredentials, config.responseType);
} }

View file

@ -1248,6 +1248,20 @@ describe('$http', function() {
}); });
it('should allow the cached value to be an empty string', function () {
cache.put('/abc', '');
callback.andCallFake(function (response, status, headers) {
expect(response).toBe('');
expect(status).toBe(200);
});
$http({method: 'GET', url: '/abc', cache: cache}).success(callback);
$rootScope.$digest();
expect(callback).toHaveBeenCalled();
});
it('should default to status code 200 and empty headers if cache contains a non-array element', it('should default to status code 200 and empty headers if cache contains a non-array element',
inject(function($rootScope) { inject(function($rootScope) {
cache.put('/myurl', 'simple response'); cache.put('/myurl', 'simple response');