2016-12-05 12 views
3

私はAngular2コンポーネントでエラー処理をテストしたいので、サービスをモックしてObservable.throw( 'error')を返すようにしたいとします。 JasmineとKarmaとAngular 2を使って、どうすればいいですか?Angular2テストでObservable.throwをモックできますか?

+1

コード例を教えてください。あなたの質問に文脈を追加するには、私たちが正確な答えを出すことができます。 – Supamiu

答えて

5

あなたはcreateを観察可能にして、オブザーバーerrorを呼び出してください。たとえば、

let mockService = { 
    error: false, 
    data: 'something', 
    getData:() => { 
    return Observable.create(observer => { 
     if (this.error) { 
     observer.error(new Error(..)) 
     } else { 
     observer.next(this.data); 
     } 
     observer.complete(); 
    }) 
    } 
} 

あなたのテストでは、成功のケースとエラーケースの両方でモックを使用できます。エラーの場合は、errorプロパティをtrueに設定するだけです。成功の場合、nextがデータとともに呼び出されます。 observer.nextobserver.errorobserver.completeを呼び出すとき

あなたが観測可能に加入

は、次の3つのコールバック、 successerror、および observerとそう complete

service.getData().subscribe(
    (data) => {} // sucess 
    (error) => {} // error 
() => {}  // complete 
) 

を渡すことができ、対応するコールバックが呼び出されます。

+0

私はこれで少し問題があります。それは私がプロパティを "true"に設定したというテスト宣言、つまり "それ"ですか?プロパティを "true"に設定すると、変更がテスト宣言で取得されません。設定しています。これが役立つ場合は、コードをplnkrに置くことができます。 – bmd

0

Observable.throw({status:404})のようなObservableのエラーオブジェクトを単純にモックして、観測可能なエラーブロックをテストできます。

const xService = fixture.debugElement.injector.get(SomeService); 
const mockCall = spyOn(xService, 'method') 
         .and.returnValue(Observable.throw({status: 404})); 
関連する問題