2017-11-07 20 views
3

私のAngular 4.0.0アプリ内に、私のコンポーネントで呼び出されたこのメソッドがあります。Jasmine:メソッドコールバックをスパイする方法:method.then()

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

iはユニットテストに取り組んでいますので、私はサービスをからかっを経由して、私のコンポーネントを分離しています:

このメソッドは、サービス内で呼び出され、私は次のように、この方法その後、モックよ:

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

しかし、実行する際に、その私のspyMethodが呼び出されていないようです:

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

問題の原因についてのご意見はありますか?

+1

オブザーバブルにはthen()メソッドがありません。約束する。サービスメソッドのドキュメント/コード/戻り値の型を確認し、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私のメソッドは、キャッチコールバック(myMethod()。then()。catch()をサポートしています。どのようにキャッチブロック上のスパイの任意のアイデア? ) – firasKoubaa

関連する問題