2016-06-21 30 views
1

我有一個方法返回函數引用。茉莉花條件callThrough和callFake

function methodetobeMoked(param){ 
    case1:return func1; 
    case 2: return func2; 
. 
. 
case n: return funcN; 
} 

我需要去窺探這個方法和特定的輸入參數p

返回假的函數引用是否有茉莉測試任何有條件電話接通率 我的情況是

SpyOn(some object,'someMethode').and.{if param=p callFake(fakeMethode) else callThrough()}

我試過callFake有沒有辦法將控制權從原方法傳遞給原始方法?

回答

0

那麼,你可以通過調用函數callFake簡單地返回回調函數。

事情是這樣的:

spyOn(someObject, 'someMethod').and.callFake(function(){ 
    if(someCondition) return function() {}; 
    else if(someOtherCondition) return function() {}; 
    else return function() {}; 
}); 

我沒有測試尚未但這應該工作。

+0

測試複製應用程序邏輯是一個壞主意。 – abbr

2

茉莉間諜保持在一個名爲originalValue屬性的原始功能,所以你可以這樣做:

var mySpy = {}; 
mySpy = t.spyOn(obj, 'methodToBeMocked').and.callFake(function (param) { 
    if (param === 'fake case') { 
     // return fake result 
    } else { 
     // do this if using Jasmine 
     return (mySpy.and.callThrough())(param); 
     // do this if using Ext + Siesta and duped by common syntax :) 
     // return mySpy.originalValue(param); 
    } 
}); 
+0

這可能曾經工作過一次,但現在不復存在。 – jaucourt

+0

沒錯。你可以這樣做: 'return(mySpy.and.callThrough())(param);' 請參閱:https://jsfiddle.net/x1vywp0g/ – ZagNut

+0

@jaucourt我忘記了我正在使用Siesta,而不是Jasmine。接得好! – ZagNut