使用 catch in promises 进行断言超过超时
Making assertions with catch in promises exceeds timeout
我想在承诺链的 catch
块中进行断言,但它达到了超时。断言在 then
块中有效,但似乎在 catch
块中,从未达到 done()
。是不是被打压了?有没有更好的方法来测试承诺拒绝?
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?
});
});
});
承诺被拒绝
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 让你 return 在你的测试中得到承诺。被拒绝的 Promise 意味着测试失败,而成功的 Promise 意味着测试成功。失败的断言会导致代码抛出异常,这将自动使 Promise 失败,这通常是您想要的。简而言之:
describe('API calls', function () {
it('should test remote api calls', function () {
return apicall([])
.then((data) => {
assert.equal(data.items.length, 2);
});
});
});
我想在承诺链的 catch
块中进行断言,但它达到了超时。断言在 then
块中有效,但似乎在 catch
块中,从未达到 done()
。是不是被打压了?有没有更好的方法来测试承诺拒绝?
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?
});
});
});
承诺被拒绝
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 让你 return 在你的测试中得到承诺。被拒绝的 Promise 意味着测试失败,而成功的 Promise 意味着测试成功。失败的断言会导致代码抛出异常,这将自动使 Promise 失败,这通常是您想要的。简而言之:
describe('API calls', function () {
it('should test remote api calls', function () {
return apicall([])
.then((data) => {
assert.equal(data.items.length, 2);
});
});
});