Context:我是编写 Redux Saga 测试的新手,并且一直在使用反应样板 https://github.com/react-boilerplate开发一个应用程序,该应用程序使用 Jest 进行测试。样板文件非常模块化且复杂,我什至不知道如何开始编写测试来模拟选择器并声明我的 Saga 在测试中使用。
在 Saga 中,我使用 Reselect(在“./selectors”文件中)从减速器中获取“用户名”和“密码”,并使用以下命令将它们分配给常量:yield select
,并使用它来运行 API 调用。我不认为我的问题在于测试传奇,而是模拟传奇中的状态和选择器以模仿登录信息已填写并可以从状态中获取。
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
作为测试传奇的一种手段,我只是想我不知道从哪里开始模拟测试中的状态,我的传奇可以将常量分配给......我认为从那里我可以处理其余的事情。
有没有人,特别是如果您使用过样板文件,有什么建议吗?