diff --git a/src/interceptors/request.ts b/src/interceptors/request.ts index feeb6db..3b02370 100644 --- a/src/interceptors/request.ts +++ b/src/interceptors/request.ts @@ -26,7 +26,7 @@ export function defaultRequestInterceptor(axios: AxiosCacheInstance) { return config; } - const key = axios.generateKey(config); + const key = (config.id = axios.generateKey(config)); // Assumes that the storage handled staled responses let cache = await axios.storage.get(key); diff --git a/src/interceptors/response.ts b/src/interceptors/response.ts index e2ff68a..db2ecd0 100644 --- a/src/interceptors/response.ts +++ b/src/interceptors/response.ts @@ -27,7 +27,7 @@ export function defaultResponseInterceptor( }; const onFulfilled: ResponseInterceptor['onFulfilled'] = async (response) => { - response.id ??= axios.generateKey(response.config); + response.id = response.config.id ??= axios.generateKey(response.config); response.cached ??= false; // Response is already cached diff --git a/test/interceptors/request.test.ts b/test/interceptors/request.test.ts index 04cdf22..d4a64ad 100644 --- a/test/interceptors/request.test.ts +++ b/test/interceptors/request.test.ts @@ -117,14 +117,36 @@ describe('test request interceptor', () => { it("expect two requests with different body aren't cached", async () => { const axios = mockAxios(); - const url = 'https://jsonplaceholder.typicode.com/posts'; - - const result = await axios.get(url, { data: { a: 1 } }); + const result = await axios.get('url', { data: { a: 1 } }); expect(result.cached).toBe(false); - const result2 = await axios.get(url, { data: { a: 2 } }); + const result2 = await axios.get('url', { data: { a: 2 } }); expect(result2.cached).toBe(false); }); + + it('tests a request with really long keys', async () => { + const axios = mockAxios(); + + const result = await axios.get('url', { + data: Array(5e3).fill({ rnd: Math.random() }), + params: Array(5e3).fill({ rnd: Math.random() }) + }); + + expect(result).toBeDefined(); + }); + + it('expect keyGenerator is called once during a single request', async () => { + const axios = mockAxios(); + + const spy = jest.spyOn(axios, 'generateKey'); + + await axios.get('url', { + // generates a long key + data: Array(5e3).fill({ rnd: Math.random() }) + }); + + expect(spy).toHaveBeenCalledTimes(1); + }); });