2015-11-04 79 views
0

的函数调用我有以下的代码结构:茉莉花:刺探其他模块

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,或是否有另一种方式来做到这一点。提前致谢。

+0

看看[proxyquire](https://github.com/thlorenz/proxyquire) - 它允许模拟模块(需要调用) –

+0

来自ES6,这是因为你有一个名为'const'的变量,然后使用'const'来设置th e'params'变量。如果你要做ES6,一直这样做,并使用'let'和'const'而不是'var'。特别是如果你要创建一个名为'const'的变量。这是坚果。 – coblr

回答

0

最后我找到了解决我的问题的方法。我在我的构造函数Const中创建了函数finalCall()的原型,并在其对象上放置了一个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; 

,在我的规格文件:

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