Jasmine:监视另一个模块的函数调用

时间:2015-11-04 14:47:57

标签: node.js jasmine

我有以下代码结构:

const finalCall = require('./final.js');
function Func(){
  this.process = {
    initCall: function(params, callback){
      let proParams;
      //processing...
      return finalCall(proParams, callback);
    }
  }
}

现在我需要测试我的initCall函数是否正确处理params并调用finalCall。我需要知道如何在我的finalCall函数上创建一个间谍,所以当它被调用时,我可以跟踪proParams。 我尝试过类似的东西:

const func = new Func();
let proParams = null;
spyOn(func.process.initCall, "finalCall").and.callFake(function(pParams, callback){
  proParams = pParams;
});
let params = { };
func.process.initCall(params, null);
expect(func.process.initCall.finalCall).toHaveBeenCalled();
expect(proParams).toEqual('...');

我缺少可以访问finalCall的对象,或者是否有其他方法可以访问。提前谢谢。

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决问题的方法。我在构造函数finalCall()中创建了函数Const的原型,并在其对象上放置了spyOn

<强>解决方案

主要模块:

const finalCall = require('./final.js');
function Func(){
  const self = this;
  this.process = {
    initCall: function(params, callback){
      let proParams;
      //processing...
      return self.finalCall(proParams, callback);
    }
  }
}
Func.prototype = finalCall;

并在我的Spec文件中:

const func = new Func();
let proParams = null;
spyOn(const, finalCall);
let params = { };
func.process.initCall(params, null);
expect(func.finalCall).toHaveBeenCalled();