2017-11-07 10 views
3

내 구성 요소에서이 메서드가 호출되었습니다.Jasmine : 메서드 콜백을 SpyOn하는 방법 : 내 angle 4.0.0 app 내에 method.then()

this.myService.myMethod(param).then(any => { 
     console.log("success case") 
    }) 
     .catch(error => { 
      console.log("error"); 
     } 
     }); 
    }; 

내가 단위 테스트에서 일하고 있어요 때문에, 내가 서비스를 조롱 통해 내 구성 요소를 분리하고 있습니다 :

이 방법은 서비스 내에서라고 나는 다음과 같이,이 방법 다음 조롱하고있어 :

myMethodSpy= spyOn(service, 'myMethod').and.callFake((reg) => { 
    return Observable.of('always error message'); 
}); 

그러나 실행할 때, 그 내 spyMethod가 호출되지 것 같다 :

TypeError: this.service.myMethod(...).then is not a function

문제의 출처에 관한 아이디어가 있습니까?

+1

Observables에는 then() 메소드가 없습니다. 약속드립니다. 서비스 메소드의 documentation/code/return 유형을 확인하고 Promise를 리턴하는지 확인하십시오. 시험에서 가짜 약속을 되 찾으십시오. –

답변

0
const pMock = {then:() => 'something'} 
myMethodSpy= spyOn(service, 'myMethod').and.returnValue(pMock); 

또는 실제 약속을 반환 할 수 있습니다.

const pMock = new Promise((resolve, reject) => { 
    resolve(someValue); 
    // or reject("failure reason"); 
}); 
myMethodSpy= spyOn(service, 'myMethod').and.returnValue(pMock); 
+0

약속은'Promise.resolve (someValue)'를 사용하여 간단하게 만들 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve –

+0

@Guy Yogev 내 메서드는 catch 콜백 (myMethod(). then(). catch() 메서드를 지원합니다.) 어떻게 catch 블록에 스파이의 아이디어?) – firasKoubaa