2013-03-19 95 views
1

我在寫一個使用串口通信的節點模塊。 使用write()調用所有傳出消息,併爲所有傳入消息引發事件。如何測試Jasmine node.js中的事件?

我希望能夠測試傳入的消息。當調用寫入時,傳入的消息需要很短的時間(在良好條件下少於1/10秒)。

段:

it("can receive", function() { 
    btReader.on('dataReceived', function(data){ 
     console.log(data); 
     expect(data).toBeDefined(); 
    }); 
}); 

這樣只會使事件處理程序,但提出的任何事件之前完整的測試將完成。然後,當引發事件時,代碼將執行,但不會真正測試。

我必須使用waitsFor方法,然後在事件處理程序中將bool設置爲true嗎?

+0

你看過茉莉花節點嗎?它有很好的異步支持:https://github.com/mhevery/jasmine-node – 2013-08-04 23:39:05

回答

2

由於您的事件是異步的,所以您需要使用waitsFor方法來測試處理程序是否已被調用。你完全正確,你需要創建一個變量來測試。所以,你最終用3個部分的test

  1. 初始設置和事件調用(即write和一些變量設置爲false)。
  2. waitsFor其中變量設置爲true的方法。
  3. 確保變量已設置爲true的最終期望測試。

waitsFor方法需要一個超時參數,所以如果需要200ms運行你的函數,那麼給超時一個合理的值以確保它永遠不會意外失敗。當然,你不必像上面那樣做一個簡單的測試,你可以將變量設置爲任何寫入方法,並確保它完成了它應該做的事情。

+0

這感覺有點像我的解決方法,但我認爲這可能是與茉莉花這樣做的唯一方法。謝謝! – 2013-03-19 09:37:40

+0

你是什麼意思這是一種解決方法? Javascript同步執行,這個回調方法是所有單元測試框架中非常標準的模式。 QUnit有一個'stop()'和'start()'方法,這有點不直觀。我認爲Jasmine是異步測試最直觀的(個人觀點雖然)。 – Deif 2013-03-19 10:02:13

+0

也許「解決方法」的定義有點過於苛刻。我只是想知道是否有可能沒有額外的變量。 (不習慣測試框架,我現在非常喜歡Jasmine) – 2013-03-19 10:17:30

相關問題