gpt4 book ai didi

javascript - 为 JavaScript Promise 编写测试

转载 作者:行者123 更新时间:2023-11-28 05:01:59 24 4
gpt4 key购买 nike

我有这个简单的中间层代码,它将被某人调用,并且它正在调用一些其他返回 Promise 的 api

function getSomething() {
return api.fetchSomething()
.then(response => response)
}

为了测试这一点,我编写了这个测试,该测试正在通过。

it('should make a call to api method ', () => {
const someResponse = {};
const fetchSomethingStub = sandbox.stub(api, 'fetchSomething').returns(Promise.resolve(someResponse));
const someResult = getSomething();

someResult.then((result) => {
expect(fetchSomethingStub ).to.have.callCount(1);
expect(result).to.eventually.equal(someResponse);
});
});

但是由于我的 api.fetchSomething() 也可以返回拒绝,我将 stub 更改为返回 Promise.reject 但测试正在通过,但带有消息 (node :14688)UnhandledPromiseRejectionWarning:未处理的 promise 拒绝(拒绝ID:2):[对象对象]。这是否意味着我必须在这一层有 catch block 才能。?我打算只传递 api 的值。我也正在正确地进行测试以保证 promise 。任何关于使用 mocha 寻找 Promise 测试的资源建议都值得赞赏。

最佳答案

所以从根本上来说,这段代码中有一个未处理的异常。如果您确实想测试拒绝情况下的行为,那么是的,您需要一个具有 .catch 处理程序的测试。如果 Promise 被拒绝,则永远不会调用 .then 处理程序,因此您的断言将不会发生。

您可以做的另一件事是更改此行:

    someResult.then((result) => {

    return someResult.then((result) => {

这会将 Promise 返回给 Mocha 运行程序,并让它正确检测到 Promise 被意外拒绝的失败测试。

如果没有它,您的测试中还会出现同步错误 - Mocha 不知道在报告结果之前要等待异步内容完成。返回 promise 可以让您正确进入测试运行程序和结果报告。

关于javascript - 为 JavaScript Promise 编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42079857/

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