抛出错误[对象对象]

时间:2018-06-19 20:04:39

标签: javascript react-native jest redux-saga

我遇到了这个问题,此后就发现了问题,但是作为其他用户的文档,我在这里发布了我发现的内容。还要注意,经验丰富的JS开发人员可能已经了解我在这里的错误了,这仅适用于像我这样的JS新手。

我的传奇故事如下:

setuptools

在我的测试中,我试图测试传奇人物的抓地力。我的部分测试代码如下:

sudo apt-get install python3-setuptools

运行测试的结果给出了类似于以下内容的输出:

   function* patchCart({ payload: { data, sections } }) {
      const current = yield select(cartSelectors.getCartModel);
      const oldAttributes = pick(current, keys(data));

      try {
        yield call(patchCartTry, data, sections);
      } catch (error) {
        yield call(patchCartError, error, oldAttributes);
      }
    }

在整个互联网上找不到我的答案,遇到的每个人都遇到了这个问题,他们的错误是由于未在其迭代器上调用 let current = iterator.next().value; expect(current).toEqual(select(cartSelectors.getCartModel)); current = iterator.throw(error).value; expect(current).toEqual(call(utilities.patchCartCatch, error, oldAttributes)); 引起的-我已经在这样做了。

即使在catch块中的传奇内部也没有触发,所以我知道测试实际上并没有进入其中。

敬请期待答案和后续解释。

1 个答案:

答案 0 :(得分:1)

问题是,当我打电话给.next()时,我打电话的次数不够。

我阅读过的所有资源都说您需要调用.next()才能进入生成器函数,但是没有一个提到您需要在调用.throw(error)之前调用它的原因是将您的函数迭代到try块中。测试的行为完全正确,您在try/catch之外引发了异常,因此测试引发了错误。

所以要修复我的测试,我必须将其更改为:

    let current = iterator.next().value;
    expect(current).toEqual(select(cartSelectors.getCartModel));

    current = iterator.next().value;
    expect(current).toEqual(call(utilities.patchCartTry, data, sections));

    current = iterator.throw(error).value;
    expect(current).toEqual(call(utilities.patchCartCatch, error, oldAttributes));

因此,在引发将我带入try块的异常之前,请确保我在catch块中。

由于对这个启示的信任-对我来说这是一个启示-是由于其他人的缘故,所以这里有指向帮助我解决此问题的评论的链接。 github issue comment