Вопрос проверяет понимание unit-тестирования бизнес-логики в стейт-менеджерах Effector и Redux, включая тестирование сторов, эффектов и редьюсеров.
Unit-тестирование сторов и эффектов позволяет проверить корректность обработки событий и асинхронных запросов без рендеринга компонентов. Это ускоряет выполнение тестов и повышает их надежность.
Effector предоставляет простой API для тестирования: можно подписаться на стор через .watch() и проверить его состояние после вызова события или эффекта. Для асинхронных эффектов используют mock-функции.
import { createStore, createEvent, createEffect } from 'effector';
const increment = createEvent();
const $counter = createStore(0).on(increment, (state) => state + 1);
// Тест
const values = [];
$counter.watch((v) => values.push(v));
increment();
increment();
console.log(values); // [0, 1, 2]В Redux редьюсеры — чистые функции, их легко тестировать, передавая начальное состояние и экшн. Для асинхронных экшенов (thunk) используют createAsyncThunk и mock-запросы.
import { createSlice, configureStore } from '@reduxjs/toolkit';
const counterSlice = createSlice({
name: 'counter',
initialState: { value: 0 },
reducers: {
increment: (state) => { state.value += 1; },
},
});
// Тест редьюсера
const result = counterSlice.reducer({ value: 0 }, counterSlice.actions.increment());
console.log(result); // { value: 1 }Unit-тестирование сторов и эффектов необходимо для проверки бизнес-логики в изоляции от UI. Это особенно полезно в крупных проектах, где сложно отлаживать взаимодействие компонентов и состояния.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию