我有一些代码如下所示:
var request = require('request');
function Service(){
this._config = require('../path/to/config.json');
}
Service.prototype.doThing = function(){
return new Promise(function(resolve, reject){
request.post(url, {payload}, function(error, response, body){
//handle response
resolve(true);
}).on('error', function(err){
//handle errors
resolve(false);
});
});
}
我正在尝试测试出错时运行的块,但由于承诺而遇到困难。我使用 mocha 进行测试运行,使用 sinon 进行存根。我可以存根请求,以便可以计算调用 on 方法的次数,但包含的 Promise 永远不会解析。
有一些包可以与 sinon 一起处理 Promise(我尝试过 sinon-as-promised 和 sinon-stub-promise),但我必须存根整个 doThing 方法才能正确解析。我将不胜感激任何关于测试此代码的正确方法或可能更容易测试的替代代码结构的意见。
有问题的测试(挂起等待 doThing 承诺返回)如下:
context('when the server is unavailable', function(){
beforeEach(function() {
var onStub = sinon.stub();
requestStub = {post: function(){ return {on: onStub}}};
Service = proxyquire('path/to/service', {request: requestStub});
service = new Service();
});
it('should not set the auth key', function(){
return service.doThing().then(function(x){
return assert(onStub.calledOnce);
});
});
});
Thanks!