From 43e35b68cd5abdb7a39403a6f741036123f907f8 Mon Sep 17 00:00:00 2001 From: Marc Bachmann Date: Thu, 1 Apr 2021 11:30:27 +0200 Subject: [PATCH] Adopt the official behavior of validateStatus and always return an error instance on rejection Axios 0.19 introduced the validateStatus support. With `validateStatus: null`, the request should get resolved and not rejected. https://github.com/axios/axios/blob/535d0c45c140cc2267612fcce019c1d65857be1d/lib/core/settle.js --- src/utils.js | 40 +++++++++++++++++++++------------------- test/basics.spec.js | 9 +++++++++ 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/utils.js b/src/utils.js index 5be88d0..d3a335a 100644 --- a/src/utils.js +++ b/src/utils.js @@ -114,37 +114,39 @@ function purgeIfReplyOnce(mock, handler) { function settle(resolve, reject, response, delay) { if (delay > 0) { - setTimeout(function () { - settle(resolve, reject, response); - }, delay); + setTimeout(settle, delay, resolve, reject, response); return; } - if (response.config && response.config.validateStatus) { - response.config.validateStatus(response.status) - ? resolve(response) - : reject( - createAxiosError( - "Request failed with status code " + response.status, - response.config, - response - ) - ); + // Support for axios < 0.13 + if (!rejectWithError && (!response.config || !response.config.validateStatus)) { + if (response.status >= 200 && response.status < 300) { + resolve(response); + } else { + reject(response); + } return; } - // Support for axios < 0.11 - if (response.status >= 200 && response.status < 300) { + if ( + !response.config.validateStatus || + response.config.validateStatus(response.status) + ) { resolve(response); } else { - reject(response); + if (!rejectWithError) { + return reject(response); + } + + reject(createAxiosError( + 'Request failed with status code ' + response.status, + response.config, + response + )); } } function createAxiosError(message, config, response, code) { - // Support for axios < 0.13.0 - if (!rejectWithError) return response; - var error = new Error(message); error.isAxiosError = true; error.config = config; diff --git a/test/basics.spec.js b/test/basics.spec.js index 9976cc6..acbf75d 100644 --- a/test/basics.spec.js +++ b/test/basics.spec.js @@ -404,6 +404,15 @@ describe("MockAdapter basics", function () { }); }); + it("supports providing a validateStatus null value", function () { + instance.defaults.validateStatus = null; + mock.onGet("/foo").reply(500); + + return instance.get("/foo").then(function (response) { + expect(response.status).to.equal(500); + }); + }); + it("respects validatesStatus when requesting unhandled urls", function () { instance.defaults.validateStatus = function () { return true;