2015-11-04 60 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();