如何为正常回调和q和promise回调编写单元测试用例?

时间:2014-11-26 06:36:22

标签: unit-testing callback promise mocha q

我有一个函数,我已经编写了代码来处理回调,就像这个

exports.CallbackExample=function(req,res)
{
   return callfunction().then(function(data)
  {
      saveData(data).save(function(err,responseData)
     {
          res.send(responseData);

     })

  });

}

我想为上面的代码编写单元测试用例。所以我写得像这样

var res={};
var spy=res.send=sinon.spy();
CallbackExample(req,res).then(function()
{

   expect(spy.calledOnce).to.equal('true');

});

但这不起作用。我认为原因是函数有两个不同的回调,如第一个回调(Q和promises),第二个是正常的回调....我想可能是因为这个原因,这是行不通的。由于这个障碍,我无法前进。那么如何为该函数编写单元测试用例而不对该函数进行任何更改?....这可能吗? ..我希望你们中的任何一个人都能帮助我。在此先感谢我等待你的解决方案..

1 个答案:

答案 0 :(得分:0)

IMO,承诺没有正确锁定。使用Deferred

解决它
exports.CallbackExample=function(req,res) {

   return callfunction().then(function(data){
     var deferred = Q.defer();
     saveData(data).save(function(err,responseData){
          if (err) {
            deferred.reject(err);
          } else {
            res.send(responseData);
            deferred.resolve(true);
          }
     });
     return deferred.promise;
   });
}