2014-02-27 41 views
1

這是關於測試的一般問題,但我將在Node.js的上下文中對其進行構建。我並不關心某項技術,但它可能很重要。在nodejs中測試後臺進程(使用磁帶)

在我的申請,我有幾個模塊被要求當我的Web服務器接收到一個請求做工作。對於其中一些模塊,我在請求它們之前關閉了請求。

什麼是測試這些模塊都在做他們應該做的有什麼好辦法?

對RSpec的建議here是模擬這些模塊正在做的工作,只是確保正在調用適當的方法。這對我很有意義,但是在Node.js中,因爲我的模塊不是全局的,所以我不認爲我不能在不改變我的程序體系結構的情況下嘲笑函數,以便每個實例都能接收到它需要的對象的實例。

[1]這是一個衆所周知的編程範式,但我不記得它的名字現在。

另一種選擇我看到的是使用setTimeout並把我最好的猜測時,這些模塊與他們的工作做的。

這些都不是理想的。

我錯過了什麼嗎?後臺進程沒有經過測試?

+0

您是否嘗試過在隔離測試這些組件?就像,而不是測試整個集成系統,你是否嘗試過爲每個單獨的模塊編寫測試,模擬他們從主進程中獲得的東西?每當我做一個後臺進程時,那個進程就會有一些對象或者一些對象的集合。這些可以獨立於它們是否處於後臺進程來執行。 – juanpaco

+0

是的,我有模塊的單元測試,他們可以獨立執行。對這些進行集成測試是否正常? – mehulkar

回答

0

既然你說的這些後臺組件的集成測試,一些策略浮現在腦海中。

  1. 將測試模式的所有異步性排除在操作之外。我想象你有某種排隊過程(這可能是一個錯誤的假設),你把工作投入隊列,然後你的模塊拿起那個工作並完成他們的任務。您可以重新測試您的測試工具,使測試工具代替排隊機制,並且您可以直接控制模塊執行的時間。
  2. 重構您的模塊以採取某種next回調函數。它們最終的功能有點像Express的中間件層,或者功能如何工作,但是在每個模塊中,當模塊的任務完成時,您會傳遞一些回調。一旦所有模塊都已報告,那麼您可以檢查程序的狀態。
  3. 準確地說,你已經建議 - 等待一段時間,如果還沒有完成,請考慮失敗。 Mocha排序這樣做,因爲如果給定的測試超過了可定義的閾值,那麼這是一個失敗。我不喜歡這種方式,因爲如果你添加更多的測試,他們都必須等待相同的時間。
相關問題