gpt4 book ai didi

javascript - 抛出错误 [object Object]

转载 作者:行者123 更新时间:2023-11-29 23:20:21 24 4
gpt4 key购买 nike

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

我有一个故事是这样的:

   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);
}
}

在我的测试中,我试图测试 saga 的 catch block 。我的部分测试代码如下所示:

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

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

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

Error
[object Object] thrown

在整个互联网上我都找不到答案,我遇到的每个人都有这个问题,他们的错误是由于没有在他们的迭代器上调用 .next() - 我是已经在做了。

甚至在 catch block 中登录 saga 也没有触发,所以我知道测试从未真正进入那里。

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

最佳答案

问题是,当我调用 .next() 时,我调用它的次数不够。

我读过的所有资源都说你需要调用 .next() 来进入生成器函数,但是没有一个提到你需要在调用 之前调用它的原因.throw(error) 是你需要将你的函数迭代到 try block 中。测试的行为完全符合预期,您在 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));

因此确保在抛出将我带入 catch block 的异常之前我在 try block 中。

因为这个启示的功劳 - 对我来说这是一个启示 - 是由于其他人,这里是帮助我解决这个问题的评论的链接。 github issue comment

关于javascript - 抛出错误 [object Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50936142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com