我有一个非常简单的函数返回一个对象:
export const fetchThing = (thingId) => ({
description: "hi",
thing: thingId
})
我稍后会扩展此功能以执行异步操作,但我试图让事情变得简单。
使用Redux-Saga我尝试执行以下操作:
export function* requestThingSaga({payload}) {
const thing = yield call(fetchThing, payload.thingId)
console.log(thing);
}
但是当我测试传奇时,我发现fetchThing
没有被调用:
gen = requestThingSaga({payload: {thingId: 1 });
gen.next() // logs 'undefined'
我无法理解发生了什么。 call
的文档表示可以使用具有正常返回值的函数。我不明白为什么这不起作用。有什么想法吗?
答案 0 :(得分:0)
redux-saga
的重点是制作效果“声明性”。所以你需要一个能够处理这些效果的解释器。 ReduxSaga中间件充当了这样一个解释器,可以执行调用,等待承诺等。否则它只是一个声明(在这种情况下)你想调用外部函数。因此,你的测试有点“测试效果解释器”,只能断言你的传奇返回的效果,而不是实际做“真实”的事情。
gen = requestThingSaga({payload: {thingId: 1 });
// test by inspecting .value w/o actuall call
gen.next().value.should.be.deep.equal(call(fetchThing, 1))
// "interprete" call effect by passing a value back
gen.next({description: 'hi', thing: 1})
BTW gen
应该更好地命名为iter
:)因为它是Iterator而不是生成器。