目前可以编写reducer并测试如下的sagas:
// selector
const selectThingById = (state, id) => state.things[id]
// in saga
const thing = yield select(selectThingById, id)
// and test
expect(gen.next().value)
.toEqual(select(selectThingById, id))
但是我想使用更多功能方法来编写我的reducer并将数据(状态)放在参数的最后:
// selector
const selectThingById = R.curry((id, state) => state.things[id])
// in saga
const thing = yield select(selectThingById(id))
// test: this actually fails
expect(gen.next().value)
.toEqual(select(selectThingById(id)))
测试失败,因为
selectThingById(id)
每次都会创建新函数。这可以通过选择将参数放在
select
之前而不是追加来解决。是否有可能或有任何方法可以测试这种选择器? 最佳答案
您需要使用call
效果调用选择器工厂,以便可以使用gen.next(val)
将正确的函数注入到传奇中
// in saga
const selector = yield call(selectThingById, id)
const thing = yield select(selector)
// test
const selector = selectThingById(id)
gen.next(selector)
.toEqual(call(selectThingById, id))
expect(gen.next().value)
.toEqual(select(selector))
关于javascript - 如何在Redux传奇中测试功能选择器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45751764/