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

IT技术 reactjs jestjs redux-saga
2021-05-14 15:49:57
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个回答

这只是发生在 old 上的问题redux-saga,您的代码将适用于最新版本(目前为 v1.1.3)。

为此创建了一个测试片段,该测试与redux-sagaversion完美配合 1.1.3如果我们将版本降级到0.16.2.

所以版本升级可以修复这个错误。希望能帮助到你。

我想开玩笑地测试所有效果,但我得到了

要处理错误,首先需要了解函数生成器通常是如何工作的,而与 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语句中解构