2016-11-16 36 views
1

私はこのサービスを使用して、観察可能なエラーストリームにアイテムを追加することをテストします。私は、サブスクリプション・コールバックが実際に呼び出されたことを確認するためにcalled変数を使用観測される観測可能なストリームのユニットテストの正確な方法

it('can be subscribed for errors',() => { 
    let testError = new Error('Some error.'); 
    let called = false; 
    let subscription = service.onError.subscribe(error => { 
     called = true; 
     expect(error).toEqual(testError); 
    }); 
    /// This makes an error to be added to onError stream 
    service.setError(testError); 
    expect(called).toEqual(true); 
}); 

。さもなければテストは合格しません。しかし、それは私にとって正しいとは思わない。また、ストリームが非同期の場合は動作しません。

これはテストするのに適した方法ですか?そうでない場合は、正しく行う方法は?

EDIT:これはテストされているクラスです。それは実際にタイコである。

import { ReplaySubject } from 'rxjs/Rx'; 

export class ErrorService { 
    private error: Error; 

    public onError: ReplaySubject<Error> = new ReplaySubject<Error>(); 

    constructor() { 
    } 

    public setError = (error: Error) => { 
     this.error = error; 
     console.error(error); 
     this.onError.next(error); 
    } 

    public getError() { 
     return this.error; 
    } 

    public hasError() { 
     return !!this.error; 
    } 
} 
+0

あなたが作業しているプログラミング言語を示すタグを追加する必要があるかどうか疑問に思っています... – GhostCat

+0

@GhostCat okありがとう –

+0

あなたもテストしようとしているメソッドを投稿できますか? – KwintenP

答えて

1

テスト方法は良好です。あなたは:

  • 値がexpect文で正しいかどうかを確認してください。
  • expect文が実行されていることを確認します。

特に、最後の部分が重要です。そうでないと、期待が引き起こされず、テストが誤って実行されます。

関連する問題