gpt4 book ai didi

javascript - 使用 catch in Promise 进行断言超过超时

转载 作者:行者123 更新时间:2023-12-03 06:22:59 39 4
gpt4 key购买 nike

我想在 Promise 链的 catch block 中进行断言,但它达到了超时。断言在 then block 中起作用,但在 catch block 中似乎永远不会到达 done() 。是不是被压制了?有没有更好的方法来测试 promise 拒绝?

import assert from 'assert';
import { apicall } from '../lib/remoteapi';

describe('API calls', function () {
it('should test remote api calls', function (done) {
apicall([])
.then((data) => {
assert.equal(data.items.length, 2); // this works fine
done();
})
.catch((e) => {
console.log('e', e);
assert.equal(e, 'empty array'); // ?
done(); // not reached?
});
});
});

拒绝 promise

apicall(channelIds) {
if(channelIds.length === 0) return Promise.reject('empty array');

...

}

我收到此错误:

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

最佳答案

如果这是 mocha 并且您正在使用 Promises,请不要使用回调功能;当你发现时,这会让事情变得非常尴尬。相反,mocha 让您在测试中返回 promise 。被拒绝的 Promise 意味着测试失败,成功的 Promise 意味着测试成功。失败的断言会导致代码抛出异常,这将自动使 Promise 失败,这通常是您想要的。简而言之:

describe('API calls', function () {
it('should test remote api calls', function () {
return apicall([])
.then((data) => {
assert.equal(data.items.length, 2);
});
});
});

关于javascript - 使用 catch in Promise 进行断言超过超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38782839/

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