Контекст: Я новичок в написании тестов Redux Saga и использую React Boilerplate для разработки приложения, в котором для тестирования используется Jest. Шаблон очень модульный и сложный, и мне трудно понять, как даже начать писать тест, чтобы смоделировать селекторы и указать состояние для моей Saga для использования в тесте.
В Saga я использую Реселект (в файле «./selectors»), чтобы получить «Имя пользователя» и «Пароль» из редуктора, присвоить им константу, используя yield select
, и используя это, чтобы выполнить вызов API. Я не думаю, что моя проблема в тестировании высказывания саги, но высмеивает состояние и селекторы в саге, чтобы имитировать c, что информация для входа была заполнена и может быть извлеченным из состояния.
import { takeLatest, call, put, select } from 'redux-saga/effects';
import { loginSuccess, loginFailed } from '../App/actions';
import { ON_LOGIN } from '../App/constants';
import {
makeSelectUsername,
makeSelectPassword,
} from './selectors';
import api from '../../utils/api';
// LISTENER
export default function* loginRequestListener() {
yield takeLatest(ON_LOGIN, login);
}
// WORKER
export function* login() {
const loginParams = {
username: yield select(makeSelectUsername()),
password: yield select(makeSelectPassword()),
isForceLoginAttempt: yield select(makeSelectIsForceLogin()),
};
try {
const user = yield call(api.user.login, loginParams);
yield put(loginSuccess(user));
} catch (error) {
yield put(loginFailed(error.response.data));
}
}
По сути, я ищу способ запуска саги в тесте, чтобы внутри саги я мог "заставить" объект loginParams использовать "fakeState" для селекторов, чтобы использовать вместо этого, так как, очевидно, здесь не существует состояния:
const fakeState = {username: 'test', password: 'test'}
export function* login() {
const loginParams = {
username: yield select(makeSelectUsername()) // 'test'
password: yield select(makeSelectPassword()) // 'test'
};
Я рассматривал redux-saga-tester
как средство для проверки саги, я просто предполагаю, что понятия не имею, где начать с точки зрения насмешки над состоянием в тесте, в котором моя сага может назначить константы ... Я думаю, что оттуда я справлюсь с остальными.
Есть кто-нибудь, особенно если вы работали с образцом , есть какие-либо предложения?