unit-testing - 使用 Redux Saga 操作正确测试 Auth 流程
问题描述
我只是在使用简单的旧 Jest 来测试我的新 Saga 动作。经过一番挣扎后,我了解到,与其嘲笑响应,不如将我的响应包含在对生成器的下一次调用中。以下函数的以下测试通过:
功能
import { put, call, takeEvery } from "redux-saga/effects";
export function* loginSaga({ username, password }) {
const creds = { username, password };
try {
let data = yield call(() => axios.get(ApiUrls.login, { params: creds }));
yield put({ type: "LOGIN_SUCCESS", user: data });
} catch (error) {
yield put({ type: "LOGIN_FAILURE", error });
}
}
测试
it("should return a user object on a successful login", () => {
gen = loginSaga(success.creds);
gen.next(); // call api
expect(gen.next(loginResponse.success).value).toEqual(
put({ type: "LOGIN_SUCCESS", user: loginResponse.success.data })
);
});
但是等一下!测试根本不考虑凭据!无论我使用什么凭据调用,我的测试都通过了loginSaga()
,因为它实际上并没有进行 API 调用,甚至是模拟调用!
我已经设置了这些对象来提供我对fetchMock
or的调用axios-mock-adapter
:
success = {
url: ApiUrls.Login + "?username=testuser1&password=123123",
creds: { username: "testuser1", password: "123123" }
};
badUser = {
url: success.url.replace("testuser", "xxx"),
creds: { username: "xxx", password: "123123" }
};
badPw = {
url: success.url + "0",
creds: { username: "testuser1", password: "1231230" }
};
但是这种测试方法不使用它们!
我应该如何真正使这个测试有效?
解决方案
推荐阅读
- javascript - 预览我的照片后,如何将我的照片拖到另一个保管箱?
- angular - 我如何防止剑道下拉列表在角度 4+ 中更改 valueChange 或 selectionChange 事件的值
- reactjs - React - 动态加载的图像未显示在服务器端渲染中
- c# - 将数据网格中选定的“自定义”行复制到另一个(WPF)
- influxdb - 如何在特定月份的特定时间之间选择数据?
- java - Spring Boot 错误没有可用的“javax.persistence.EntityManagerFactory”类型的合格bean
- javascript - 错误:超过 2000 毫秒的超时。承诺在测试运行前不返回
- postgresql - 如何将表作为 argtype 传递给 postgres 函数?
- c# - 写入文件的结果没有按预期工作
- sql - 如何从 Postgres 的 json 列中提取键和值?