我遇到了这个问题,此后就发现了问题,但是作为其他用户的文档,我在这里发布了我发现的内容。还要注意,经验丰富的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块中的传奇内部也没有触发,所以我知道测试实际上并没有进入其中。
敬请期待答案和后续解释。
答案 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