如何使用jest测试redux-saga的所有效果

时间:2017-11-20 21:53:33

标签: reactjs jestjs redux-saga

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)
    ]))

2 个答案:

答案 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语句中进行解构。