2017-08-24 513 views
1

我讀過這個「大理石串」文檔,但我堅持不明白。如何對rxjs5進行單元測試?

我想測試的基本上是一個「協議」。我有一個連接到Observable併發出數據的「東西」。在與Rx.NET和C#我的後端代碼,我已經寫了一個助手來測試協議,使我的測試是這樣的:

verifier.Send(new AddMaterialPickCommand(commandId, orderId, materialId: Guid.NewGuid(), quantity: 1)) 
      .FailWhen<CommandFailedEvent>(e => e.CommandId == commandId) 
      .ThenExpect<MaterialPickAddedEvent>(e => e.EntityId == orderId) 
      .ThenSend(new DeleteOrderCommand(commandId, orderId)) 
      .FailWhen<CommandFailedEvent>(e => e.CommandId == commandId) 
      .ThenExpect<OrderDeletedEvent>(e => e.EntityId == orderId) 
      .ExecuteAndWait(Timeout); 

在C#中它很容易觀測連接到所有的事情,它也很容易等待。 IMO是一個非常易讀的測試代碼。

隨着Rxjs5,我沒有發現任何可能性等待或做任何類似的事情。所以,ATM,我未能在剛剛檢查,通過我的觀察到發射的一件事情是一個預期:

sut.setValue("key1", "key2"); 
sut.getObservable("key1", "key2") 
    .subscribe(value => { 
     expect(value).toBe("testValue") // I want either execute this or fail after a timeout 
    }); 

的setValue實際上在BehaviourSubject呼籲next()

我很笨,有什麼想法嗎?

回答

0

有很多方法可以做到這一點,一個方法是使用超時如本例(working example)證明:

// Generates a value every second starting one second after subscription 
const eventEmulatorStream = Rx.Observable.interval(1000); 

// Listen to the event stream and timeout after 500 ms. 
// On timeout an error will be generated that will be caught in the 
// 'error' part of the subscribe. 
eventEmulatorStream 
    .timeout(500) 
    .subscribe({ 
     next: value => console.log(value), 
     error: err => console.log(JSON.stringify(err)) 
    }); 

我建議你看一看的RxJS reference,還有魯特那裏有好東西。根據您使用RxJS的方式和位置,您可能需要導入/加載某些內容才能訪問某些功能,但應該在RxJS文檔中對其進行相當清楚的解釋。

相關問題