可能未处理通过测试时出现错误
Possibly unhandled Error with passing tests
我有以下方法:
EventHandler.prototype.handle = function (event) {
var me = this;
return me.processEvent(event).then(function () {
return me.saveLastSeenEventRevision(event);
}).catch(function (err) {
me.logger.debug("First attempt of event process failed, trying recovery");
return me.recoveryStrategy.execute(event,me.processEvent.bind(me)).then(function() {
return me.saveLastSeenEventRevision(event);
});
});
};
我写了这个测试:
describe('when processEvent fails', function() {
beforeEach(function () {
instance.processEvent.returns(Bluebird.reject(new Error('rejection')));
});
describe('when recovery fails', function() {
beforeEach(function () {
instance.recoveryStrategy.execute.returns(Bluebird.reject(new Error('recovery rejected')));
});
it('should not save the revision', function(done) {
instance.handle(event).catch(function() {
sinon.assert.notCalled(instance.saveLastSeenEventRevision);
done();
}).done();
});
});
});
我模拟了processEvent方法的拒绝,在捕获函数中,我模拟了恢复实现的最终拒绝。我为这个方法写了更多的测试,但设置是一样的。所有测试都按预期通过了,但在控制台中我看到了以下消息:
Possibly unhandled Error: rejection
有没有其他方法来处理这些承诺以通过这一测试?
测试设置-mocha/chai/sinon,因为promise库使用bluebird。
好吧,你正在创建一个明确的拒绝,但没有在这里处理它:
instance.processEvent.returns(Bluebird.reject(new Error('rejection')));
蓝鸟看到你在这里制造了一个未经处理的拒绝,所以它会让你知道。这是因为一个真正的函数在调用时会返回拒绝,但sinon很早就创建了它,所以该应用程序有一个未处理的未决错误位置。你可以用关闭它
Bluebird.onPossiblyUnhandledRejection(function(){});
或者更好的方法是,按照承诺使用像sinon这样的工具,它可以让你做到:
instance.processEvent.rejects('rejection');
顺便说一句——不要使用愚蠢的done
语法,Mocha已经内置了promise支持。您可以通过测试return
承诺。
所以,问题出在sinon存根和设置返回值上。看来,把被拒绝的承诺作为回报价值,是西农内部如何评价的。
有两种选择:
-
不直接设置返回值,而是实现将要使用的函数,而不是存根一个
sinon.stub(instance, 'processEvent', function() { return Bluebird.reject(new Error('rejected'); });
-
按照承诺使用sinon库,该库允许以下内容:
sinon.stub(instance, 'processEvent').rejects(new Error('rejected'));
相关文章:
- 测试Angular Service解决错误回调中的promise
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- angularjs、因果报应和requirejs测试用例错误
- Mocha/Chai测试链接到函数返回断言错误
- Jasmine:测试setTimeout函数会抛出一个错误
- QUnit 测试错误与 IE(Internet Explorer)
- Jasmine测试工厂函数调用本地函数和另一个函数-获取错误:应该是间谍,但得到了function
- 为什么我的Alexa技能测试显示正确的lambda输出,但在开发人员控制台中测试时却给出错误消息
- 在CoffeeScript文件上运行Jasmine测试时,对象未定义错误
- 类型错误:无法读取未定义的属性“apply”,在测试中使用 javascript apply
- 错误:使用摩卡测试时找不到模块
- Chai 期望 [函数] 抛出一个(错误)未通过测试(使用 Node)
- 引用错误:未定义测试
- Node.js+Mocha+Should.js如何测试事件发射器抛出的错误
- AngularJS测试$resource-flush给出错误
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- Asp.net:Microsoft JScript 运行时错误:“测试”未定义
- 单元错误:测试上下文之外的断言
- TDD文档错误:测试元素是否被添加到DOM
- RegExp JavaScript错误测试