【发布时间】:2019-09-15 23:07:15
【问题描述】:
在编写测试方面,我完全是初学者,但我被分配了测试一些 api 实现的任务,这是使用 redux 和 redux-saga 完成的。场景是用户用他的用户名、密码填写准备好的表单,我的生成器函数“authenticateUser”从 api 调用正确的端点(api 处理程序是从 Swagger 自动生成的,并从私有注册表导入),以创建令牌并检查用户是否存在在数据库中。如果是这样,则将令牌保存到会话/本地存储中,并使用相应的值更新存储。
import { userAuthenticated, userAuthenticationRejected } from "../actions/user";
import { call, put } from "redux-saga/effects";
import createApi from "@my-module";
export function* authenticateUser(action) {
const myApi = yield call(createApi, {
cors: true,
securityHandlers: {
Basic: () => true,
Bearer: () => true
}
});
try {
const response = yield call(myApi.token_create, {
data: {
username: action.payload.username,
password: action.payload.password
}
});
if (response.status === 200) {
const body = yield call([response, "json"]);
const accessToken = body.access;
window.sessionStorage.setItem("accessToken", accessToken);
if (action.payload.persistAuthenticationToken) {
window.localStorage.setItem("accessToken", accessToken);
}
yield put(
userAuthenticated({
username: action.payload.username,
accessToken
})
);
} else {
throw new Error("Unauthorized");
}
} catch (error) {
yield put(userAuthenticationRejected());
}
}
在阅读有关测试方法的信息时,我完全迷失了方向。我已经尝试使用连续的“generator.next().value”进行简单的单元测试,但是在第一次 yield 之后它甚至无法进入“try”块并且比预期的更快地抛出“undefined”。
test("User authentication", () => {
const action = {
payload: {
username: "test",
password: "test"
}
};
const generator = cloneableGenerator(authenticateUser)(action);
console.log(generator.next().value);
// {
// '@@redux-saga/IO': true,
// combinator: false,
// type: 'CALL',
// payload: {
// context: null,
// fn: [Function: createApi],
// args: [ [Object] ]
// }
// }
console.log(generator.next().value);
// {
// '@@redux-saga/IO': true,
// combinator: false,
// type: 'PUT',
// payload: {
// channel: undefined,
// action: { type: 'USER_AUTHENTICATION_REJECTED' }
// }
// }
console.log(generator.next().value);
// undefined
});
当我查看似乎是首选方式的集成测试时,我不能简单地将相对简单的示例转移到我的具体案例中。
我会很感激任何帮助,因为我不知道从哪里开始。
【问题讨论】:
-
你不能模拟你的@my_module吗?其余的应该可以工作。我曾经使用这个库,它给出了更好的结果,但这取决于你github.com/jfairbank/redux-saga-test-plan/blob/master/README.md
标签: javascript reactjs redux jestjs redux-saga