Node.js 柴信农没有抓住拒绝承诺的机会
//foo.jsNode.js 柴信农没有抓住拒绝承诺的机会,node.js,sinon,chai,Node.js,Sinon,Chai,//foo.js const api = require('someApi'); exports.get = obj => { if (!obj.id) { return Promise.reject('no id'); } api.get(obj.id)... } //foo.spec.js let getStub; beforeEach(() => { getStub = sinon.stub(api, 'get'); });
const api = require('someApi');
exports.get = obj => {
if (!obj.id) {
return Promise.reject('no id');
}
api.get(obj.id)...
}
//foo.spec.js
let getStub;
beforeEach(() => {
getStub = sinon.stub(api, 'get');
});
it('should fail to retrieve location on insufficient data', () => {
let obj = {};
foo.get(obj)
.catch(err => {
getStub.should.have.not.been.called();
expect(err).to.not.equal('undefined');
})
});
当我执行测试时,我收到以下错误:
(node:73773) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): TypeError: Cannot read property 'have' of undefined
没有指向该错误的其他堆栈跟踪。就我所见,我已经通过捕获catch块中的错误来处理承诺拒绝
这是一种很好的测试方法吗?我应该如何解决这个问题?这通常是因为“it”块在catch块捕获异常之前就完成了。您可以添加一个“已完成”呼叫以防止出现这种情况:
it('should fail to retrieve location on insufficient data', (done) =>
{
let obj = {};
foo.get(obj)
.catch(err => {
getStub.should.have.not.been.called();
expect(err).to.not.equal('undefined');
done();
})
}