乐闻世界logo
搜索文章和话题

如何使用 jest 测试 axios 拦截器?

7 个月前提问
5 个月前修改
浏览次数57

1个答案

1

当您在 Jest 中测试 Axios 拦截器时,您可以采取几种不同的方法来确保拦截器的行为是按预期执行的。以下是如何使用 Jest 测试 Axios 拦截器的步骤:

  1. 模拟 Axios - 在测试中,您需要模拟 Axios 库,以便可以跟踪拦截器添加和调用的情况。

  2. 添加拦截器 - 在测试中,设置您的请求或响应拦截器。

  3. 执行请求 - 通过模拟的 Axios 发起请求。

  4. 验证拦截器行为 - 确认拦截器是否按预期修改了请求或响应。

  5. 清理 - 测试结束后,移除拦截器,避免对其他测试产生副作用。

下面是一个具体的测试用例示例,其中演示了如何测试一个简单的请求拦截器,该拦截器会在每个请求中添加一个授权头:

javascript
// 导入相关的库和模块 import axios from 'axios'; import { addAuthInterceptor } from './interceptors'; // 假设这是您定义拦截器的模块 // 使用 jest.mock 来模拟 axios jest.mock('axios'); describe('axios request interceptor', () => { it('should add an Authorization header', () => { // 设置模拟请求 const mockRequest = {}; axios.request.mockResolvedValue(mockRequest); // 添加拦截器 const interceptorId = axios.interceptors.request.use(addAuthInterceptor); // 模拟拦截器的实现 const token = 'faketoken123'; const addAuthInterceptor = (config) => { config.headers['Authorization'] = `Bearer ${token}`; return config; }; // 执行请求 axios.get('/someurl'); // 获取最后一次被调用的配置对象 const lastCall = axios.request.mock.calls[0][0]; // 验证是否添加了授权头 expect(lastCall.headers['Authorization']).toEqual(`Bearer ${token}`); // 清理拦截器 axios.interceptors.request.eject(interceptorId); }); });

在这个例子中,我们:

  • 假设了一个 addAuthInterceptor 函数,该函数用于向请求配置中添加授权头。
  • 接着,我们用 jest.mock 来模拟 axios,并设置模拟请求。
  • 调用了我们的拦截器函数,添加拦截器到 axios 实例中。
  • 发起了一个 GET 请求,此时我们的拦截器应该会被触发。
  • 使用了 axios.request.mock.calls 来获取请求配置,并验证了授权头是否已经被添加。
  • 在测试的最后,我们使用 axios.interceptors.request.eject 方法清除了拦截器,这样保证了拦截器不会影响到其他的测试。

请根据您的实际情况调整这个例子。例如,如果您有不同的拦截器逻辑,您需要在模拟拦截器实现时考虑这些逻辑。此外,如果您的拦截器是异步的,您可能需要在测试中使用 async/await

2024年6月29日 12:07 回复

你的答案