diff --git a/lib/core/settle.js b/lib/core/settle.js index 071d9e3e8f..886adb0c1f 100644 --- a/lib/core/settle.js +++ b/lib/core/settle.js @@ -11,7 +11,7 @@ var createError = require('./createError'); */ module.exports = function settle(resolve, reject, response) { var validateStatus = response.config.validateStatus; - if (!validateStatus || validateStatus(response.status)) { + if (!response.status || !validateStatus || validateStatus(response.status)) { resolve(response); } else { reject(createError( diff --git a/test/specs/requests.spec.js b/test/specs/requests.spec.js index e73eedc810..6f7bfbbb3e 100644 --- a/test/specs/requests.spec.js +++ b/test/specs/requests.spec.js @@ -157,6 +157,26 @@ describe('requests', function () { }); }); + it('should resolve when the response status is 0 (i.e. requesting with file protocol)', function (done) { + var resolveSpy = jasmine.createSpy('resolve'); + var rejectSpy = jasmine.createSpy('reject'); + + axios('file:///xxx').then(resolveSpy) + .catch(rejectSpy) + .then(function () { + expect(resolveSpy).toHaveBeenCalled(); + expect(rejectSpy).not.toHaveBeenCalled(); + done(); + }); + + getAjaxRequest().then(function (request) { + request.respondWith({ + status: 0, + responseURL: 'file:///xxx', + }); + }); + }); + // https://github.com/axios/axios/issues/378 it('should return JSON when rejecting', function (done) { var response;