Аксиомы Mocking в React Hooks с использованием библиотеки Resact-Hooks-Testing
Попытка смоделировать GET-запрос к API, но всегда получаю
Тайм-аут - асинхронный обратный вызов не был вызван в течение 10000 мс, указанного в jest.setTimeout.
хотя я увеличил таймаут, он все равно выдает ошибку.
крюк
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 };
}
Аксиос макет
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);
1 ответ
Решение
Я наконец получил решение проблемы. Существует новый способ записи act(), то есть async 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