> Как проверять конкретный action в reducer в JavaScript/TypeScript? (JavaScript, TypeScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Инрэко
Стек: JavaScript, TypeScript
> Пример ответа
Для проверки конкретного action в reducer в JavaScript/TypeScript можно использовать unit-тестирование с помощью фреймворков Jest или Vitest. Основная идея - вызвать reducer с начальным состоянием и тестируемым action, затем проверить, что новое состояние соответствует ожидаемому.
Пример на TypeScript с Jest:
TYPESCRIPT// reducer.tsinterface State {count: number;}type Action = { type: 'INCREMENT'; payload: number } | { type: 'DECREMENT'; payload: number };const initialState: State = { count: 0 };function counterReducer(state: State = initialState, action: Action): State {switch (action.type) {case 'INCREMENT':return { ...state, count: state.count + action.payload };case 'DECREMENT':return { ...state, count: state.count - action.payload };default:return state;}}// reducer.test.tsimport { counterReducer, initialState } from './reducer';describe('counterReducer', () => {it('должен обрабатывать INCREMENT action', () => {const action = { type: 'INCREMENT', payload: 5 };const newState = counterReducer(initialState, action);expect(newState).toEqual({ count: 5 });});it('должен обрабатывать DECREMENT action', () => {const action = { type: 'DECREMENT', payload: 3 };const state = { count: 10 };const newState = counterReducer(state, action);expect(newState).toEqual({ count: 7 });});it('должен возвращать текущее состояние для неизвестного action', () => {const action = { type: 'UNKNOWN' } as any;const state = { count: 2 };const newState = counterReducer(state, action);expect(newState).toBe(state); // проверка, что ссылка не изменилась});});
Ключевые моменты:
-
Тестируйте каждый action отдельно.
-
Проверяйте как изменение состояния, так и неизменность исходного объекта (иммутабельность).
-
Для TypeScript используйте строгую типизацию action и state.
-
Включайте тест на default case, чтобы убедиться, что reducer возвращает текущее состояние для неизвестных action.
> Похожие задачи по frontend
В чем преимущества статической типизации TypeScript по сравнению с динамической типизацией JavaScript?
Что такое TypeScript и чем он отличается от JavaScript
Что такое псевдомассив arguments в JavaScript?
Почему у объекта arguments в JavaScript нет метода shift
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью