2016-06-21 8 views
1

私は関数参照を返すメソッドを持っています。私はこの方法をスパイし、特定の入力のparam Pジャスミン条件付きコールスルーとcallFake

のための偽の関数リファレンスを返す必要が

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

は私のシナリオは

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

ある ジャスミンのテストのいずれかの条件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

Aジャスミンのスパイは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私はジャスミンではなくシエスタを使用していたことを忘れていました。いいキャッチ! – ZagNut