我想使用jest测试spawn块...我在beforeEach块中创建了一个生成器,并且我正在检查 generator.next()函数,像这样
beforeEach(() => {
generator = saga.postCompare();
});
和我的代码一样
export function* LoadData() {
let someVariable;
try {
for (let index = 0; index < 3; index += 1) {
yield spawn(loadUserData, varaiable1, variable2);
}
}
}
export function* loadUserData(Prop1, Prop2) {
try {
const userData = yield call(serverManager.fetch1,prop1, prop2 );
const isUserSelected = yield* isUserSelected();
if (!isUserSelected) {
return;
}
yield put(
Actions.onRequestSucceededForUser(userData.data.value, prop1),
);
}
}
答案 0 :(得分:0)
我想使用jest测试spawn块
也许接受最简单的解决方案来测试redux-saga
生成器 - 只是根据定义它们是如何工作的,而不是嘲笑任何东西。因此,每个saga
只是生成器函数,它在每个yield
运算符处产生对父函数的控制流。此外,saga-effects
事实上什么都不做 - 只需创建特殊表单对象,redux-saga
内部流程管理器(https://github.com/redux-saga/redux-saga/blob/master/src/internal/io.js)可以接受
因此,您可以轻松地从测试运行器运行测试不足的saga
函数,并对返回的操作执行断言,如下所示:
const saga = LoadData();
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))
assert(saga.next()).to.be.deep.equal(spawn(loadUserData, varaiable1, variable2))
这样就不会执行函数loadUserData
,也会创建效果描述符对象