2016-11-16 83 views
1

我使用它來測試該服務是否將某項添加到可觀察的錯誤流中。單元測試正在饋送的可觀察流的正確方法

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); 
}); 

我使用called變量來確保實際調用訂閱回調。否則,測試會在不應該時通過。但這對我來說並不合適。另外,如果流是異步的,它將不起作用。

這是一個很好的測試方法嗎?如果沒有,如何正確地做到這一點?

編輯:這是正在測試的類。實際上它在打字稿中。

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好的,謝謝 –

+0

你可以發佈你正在測試的方法嗎? – KwintenP

回答

1

您測試的方式很好。您是:

  • 檢查期望值語句的值是否正確。
  • 檢查期望語句正在執行的事實。

特別是最後一部分很重要,否則預期可能不會觸發,測試將錯誤地通過。