gpt4 book ai didi

javascript - 为什么我不能在这里使用 mockResolvedValue?

转载 作者:行者123 更新时间:2023-12-03 06:58:07 29 4
gpt4 key购买 nike

在使用以下设置时,我不清楚如何模拟我的 api 响应。
我有以下测试:

import React from 'react';
import { cleanup, render, wait } from '@testing-library/react';
import axios from 'axios';
import Condition from './index.jsx';

jest.mock('axios', () => {
return {
create: jest.fn(() => ({
get: jest.fn().mockResolvedValue({ data: {} }),
interceptors: {
request: { use: jest.fn(), eject: jest.fn() },
response: { use: jest.fn(), eject: jest.fn() },
},
})),
};
});


afterEach(cleanup);

test('fetches and displays data', async () => {
axios.get.mockResolvedValue({ data: 'mock data' });
const { container } = render(<Condition {...props} />);
await wait(() => expect(container.textContent).toContain('Current milestone'));
expect(container).toBeDefined();
});
… 以及以下 api 帮助程序:
import axios from 'axios';

const api = axios.create({
baseURL: window.apiPath,
withCredentials: true,
});

api.interceptors.request.use(config => {
const newConfig = Object.assign({}, config);
newConfig.headers.Accept = 'application/json';

return newConfig;
}, error => Promise.reject(error));

export default api;
我的 Condition组件在挂载时使用以下函数获取数据:
const fetchAsync = async endpoint => {
const result = await api.get(endpoint);
setSuffixOptions(result.data.data);
console.log('result.data.data', result.data.data);
};
axios.get.mockResolvedValue({ data: 'mock data' });测试中的行导致以下错误:
    TypeError: Cannot read property 'mockResolvedValue' of undefined

124 |
125 | test('fetches and displays data', async () => {
> 126 | axios.get.mockResolvedValue({ data: 'mock data' });
| ^
127 | const { container } = render(<Condition {...props} />);
128 | await wait(() => expect(container.textContent).toContain('Current milestone'));
129 | expect(container).toBeDefined();
我应该使用不同的方法来模拟响应吗?
编辑
调用 axios.create.get.mockResolvedValue({ data: 'mock data' });导致相同的错误。

最佳答案

要模拟您的 api 响应,您可以使用 jest.spyOn结合 mockImplementation ,例如如下:

import api from './api';

const mock = jest.spyOn(api,"get");
mock.mockImplementation(() => Promise.resolve({ data: {} }));
在上面的示例中, api.get方法被替换以模拟返回 { data: 'mock data' } 的成功调用.
可以放在你的 test功能如下:
test('fetches and displays data', async () => {
const mock = jest.spyOn(api, "get");
mock.mockImplementation(() => Promise.resolve({ data: {} }));
const { container } = render(<Condition {...props} />);
await wait(() => expect(container.textContent).toContain('Current milestone'));
expect(container).toBeDefined();
});

关于javascript - 为什么我不能在这里使用 mockResolvedValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63981693/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com