2016-06-21 3 views
1

함수 참조를 반환하는 메서드가 있습니다.Jasmine 조건부 callThrough 및 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가이 방법을 감시하고 특정 입력 PARAM 페이지

위해 가짜 함수 참조를 반환해야

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 나는 재스민이 아니라 시에스타를 사용한다는 것을 잊었다. 잘 잡으세요! – ZagNut

관련 문제