tgoop.com/testerlib/3608
Create:
Last Update:
Last Update:
Асинхронные экшены в Redux обрабатывают API-запросы и диспатчат действия по результату. Их можно проверить без UI — через мок-хранилище и анализ последовательности.
Почему важно:
Как протестировать:
1. Установим зависимости:
npm install redux-mock-store redux-thunk --save-dev
2. Создадим мок-хранилища:
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
const store = configureStore([thunk])();
3. Пример экшена:
export const fetchData = () => async dispatch => {
dispatch({ type: 'FETCH_START' });
try {
const res = await fetch('/api/data');
const data = await res.json();
dispatch({ type: 'FETCH_SUCCESS', payload: data });
} catch (e) {
dispatch({ type: 'FETCH_ERROR', error: true });
}
};
4. Позитивный сценарий:
it('dispatches FETCH_START и FETCH_SUCCESS', async () => {
global.fetch = jest.fn(() =>
Promise.resolve({ json: () => Promise.resolve({ name: 'test' }) })
);
await store.dispatch(fetchData());
const actions = store.getActions();
expect(actions).toEqual([
{ type: 'FETCH_START' },
{ type: 'FETCH_SUCCESS', payload: { name: 'test' } }
]);
});
5. Негативный сценарий (сетевая ошибка):
it('dispatches FETCH_ERROR при сбое запроса', async () => {
global.fetch = jest.fn(() => Promise.reject('Network error'));
await store.dispatch(fetchData());
const actions = store.getActions();
expect(actions).toEqual([
{ type: 'FETCH_START' },
{ type: 'FETCH_ERROR', error: true }
]);
});
Что проверяет тестировщик:
— Последовательность действий
— Корректность переданных данных
— Обработку ошибок и fallback-поведение
— Отсутствие лишних или пропущенных экшенов
#буст