function* mySaga() {
const [customers, products] = yield all([
call(fetchCustomers),
call(fetchProducts)
])
}
我想在笑话中测试所有效果,但我得到:Invalid attempt to destructure non-iterable instance
我的代码是:
const generator = mySaga()
expect(generator.next().value).toEqual(all([
call(fetchCustomers),
call(fetchProducts)
]))
答案 0 :(得分:2)
这只是旧版redux-saga
上的一个问题,您的代码将在最新版本(目前为v1.1.3)上运行。
我为此创建了a testing snippet,该测试可以与redux-saga
版本1.1.3
完美配合。如果我们将版本降级到0.16.2
,我们可以重现此错误。
因此,版本升级可以解决此错误。希望对您有所帮助。
答案 1 :(得分:1)
我想在笑话中测试所有效果,但我得到了
要处理错误,首先必须了解函数生成器通常如何工作,而不管redux-saga库。每个yield
操作都会执行中断生成器实例,并在输入/输出条目中指向yield
关键字。
因此,yield
的正确值变为generator.next().value
结果,而generator.next(RESULT)
变为yield
关键字的左值。 Redux-saga
效果不会执行任何特殊工作,只需制作特殊操作对象(https://github.com/redux-saga/redux-saga/blob/master/src/internal/io.js)
因此,要解决原始任务,只需将值传递给next()
生成器函数,该函数将在const [customers, products] = yield
语句中进行解构。