diff --git a/lib/core/dispatchRequest.js b/lib/core/dispatchRequest.js index 099f2c7..fc52c03 100644 --- a/lib/core/dispatchRequest.js +++ b/lib/core/dispatchRequest.js @@ -60,5 +60,16 @@ module.exports = function dispatchRequest(config) { ); return response; + }, function onRejected(error) { + // Transform response data + if (error && error.response) { + error.response.data = transformData( + error.response.data, + error.response.headers, + config.transformResponse + ); + } + + return Promise.reject(error); }); }; diff --git a/test/specs/requests.spec.js b/test/specs/requests.spec.js index 0a81d16..71f85c4 100644 --- a/test/specs/requests.spec.js +++ b/test/specs/requests.spec.js @@ -112,6 +112,39 @@ describe('requests', function () { }); }); + // https://github.com/mzabriskie/axios/issues/378 + it('should return JSON when rejecting', function (done) { + var response; + + axios('/api/account/signup', { + username: null, + password: null + }, { + method: 'post', + headers: { + 'Accept': 'application/json' + } + }) + .catch(function (error) { + response = error.response; + }); + + getAjaxRequest().then(function (request) { + request.respondWith({ + status: 400, + statusText: 'Bad Request', + responseText: '{"error": "BAD USERNAME", "code": 1}' + }); + + setTimeout(function () { + expect(typeof response.data).toEqual('object'); + // expect(response.data.error).toEqual('BAD USERNAME'); + // expect(response.data.code).toEqual(1); + done(); + }); + }); + }); + it('should make cross domian http request', function (done) { var response;