gpt4 book ai didi

javascript - 使用 react-hooks-testing-library 在 React Hooks 中模拟 Axios

转载 作者:行者123 更新时间:2023-11-30 19:29:06 24 4
gpt4 key购买 nike

尝试模拟对 API 的 GET 请求但总是得到

Timeout - Async callback was not invoked within the 10000ms timeout specified by jest.setTimeout.

即使我增加了超时时间,它仍然会抛出错误。

Hook

export default function apiCaller() {
const [rawApiData, setRawApiData] = useState({});
const [errorMsg, setErrorMsg] = useState('');

const callApi = async (inputValue) => {
try {
const apiData= await axios.get(
`https://cloud.iexapis.com/stable/stock/market/batch?types=chart&symbols=${inputValue}&range=3m&token=lalaccf0`
);
setRawApiData(apiData);
} catch (err) {
setErrorMsg(
'Error occured!! ' +
(Boolean(err.response) ? err.response.data : err.message)
);
}
};

return { rawApiData, callApi, errorMsg };
}

Axios 模拟

export default {
get: jest.fn().mockResolvedValue({ data: {} }),
};

测试

import { renderHook, act } from 'react-hooks-testing-library';
import apiCaller from '../components/stock-chart/stockApiCaller';
import axios from 'axios';
jest.mock('axios');

it('should set error properly when api call is unsuccessfull because of bad data', async () => {

axios.get.mockResolvedValueOnce({ data: { test: '123' } });
const { result, waitForNextUpdate } = renderHook(() => apiCaller());

act(() => result.current.callApi('fb/tsla'));
await waitForNextUpdate();

expect(result.current.rawApiData.data.test)
.toBe(123)
}, 10000);

最佳答案

我终于解决了这个问题。有一种编写 act() 的新方法,即异步 act()。请在下面找到可以正常工作的更新版本的测试。

it('should set rawData properly when api call is successfull because of', async () => {
axios.get.mockResolvedValueOnce({ data: { test: '123' } });
const { result, waitForNextUpdate } = renderHook(() => apiCaller());
await act(async () => {
result.current.callApi('fb/tsla');
await waitForNextUpdate();
});
expect(result.current.rawApiData.data.test).toBe('123');
});

更新响应 16.9.0-alpha.0

https://github.com/facebook/react/releases/tag/v16.9.0-alpha.0

关于javascript - 使用 react-hooks-testing-library 在 React Hooks 中模拟 Axios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56619497/

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