Jasmine条件callThrough和callFake

Abl*_*son 3 javascript jasmine karma-jasmine

我有一个返回函数引用的方法.

function methodetobeMoked(param){
  case1:return func1;
  case 2: return func2;
 .
 .
 case n: return funcN;
}
Run Code Online (Sandbox Code Playgroud)

我需要窥探这个方法并为特定的输入参数p返回一个假的函数引用

在茉莉花测试中是否有任何条件调用我的情景是

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

我试过callFake有没有办法从伪方法将控制传递给原始方法?

Zag*_*Nut 8

Jasmine间谍在名为的属性中保留原始函数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);
    }
});
Run Code Online (Sandbox Code Playgroud)