fix(axios): update order of interceptors

This commit is contained in:
Ali BARIN
2024-07-26 12:43:58 +00:00
parent 509a414151
commit 4c639f170e
3 changed files with 174 additions and 117 deletions

View File

@@ -1,6 +1,6 @@
import { beforeEach, describe, it, expect, vi } from 'vitest';
describe('Axios with proxy', () => {
describe('Custom default axios with proxy', () => {
beforeEach(() => {
vi.resetModules();
});
@@ -23,7 +23,13 @@ describe('Axios with proxy', () => {
expect(secondRequestInterceptor.fulfilled.name).toBe('removeBaseUrlForAbsoluteUrls');
});
describe('skipProxyIfInNoProxy', () => {
it('should throw with invalid url (consisting of path alone)', async () => {
const axios = (await import('./axios-with-proxy.js')).default;
await expect(() => axios('/just-a-path')).rejects.toThrowError('Invalid URL');
});
describe('with skipProxyIfInNoProxy interceptor', () => {
let appConfig, axios;
beforeEach(async() => {
appConfig = (await import('../config/app.js')).default;
@@ -67,7 +73,7 @@ describe('Axios with proxy', () => {
});
});
describe('removeBaseUrlForAbsoluteUrls', () => {
describe('with removeBaseUrlForAbsoluteUrls interceptor', () => {
let axios;
beforeEach(async() => {
axios = (await import('./axios-with-proxy.js')).default;
@@ -116,4 +122,48 @@ describe('Axios with proxy', () => {
expect(interceptedRequestConfig.url).toBe('/path?query=1');
});
});
describe('with extra requestInterceptors', () => {
it('should apply extra request interceptors in the middle', async () => {
const { createInstance } = await import('./axios-with-proxy.js');
const interceptor = (config) => {
config.test = true;
return config;
}
const instance = createInstance({}, {
requestInterceptor: [
interceptor
]
});
const requestInterceptors = instance.interceptors.request.handlers;
const customInterceptor = requestInterceptors[1].fulfilled;
expect(requestInterceptors.length).toBe(3);
expect(customInterceptor({})).toStrictEqual({ test: true });
});
it('should work with a custom interceptor setting a baseURL and a request to path', async () => {
const { createInstance } = await import('./axios-with-proxy.js');
const interceptor = (config) => {
config.baseURL = 'http://localhost';
return config;
}
const instance = createInstance({}, {
requestInterceptor: [
interceptor
]
});
try {
await instance.get('/just-a-path');
} catch (error) {
expect(error.config.baseURL).toBe('http://localhost');
expect(error.config.url).toBe('/just-a-path');
}
})
});
});