2010-12-10 75 views
7

我正在用node.js寫一個服務器端應用程序,並希望包含單元測試。我正在努力的一件事是單元測試的好方法EventEmittersetInterval/setTimout單元測試事件驅動javascript

我有什麼選擇單元測試異步服務器端javascript?

我知道我可以附加其他監聽到被測試的功能,但隨後我怎麼garantuee的測試功能,不斷運行EventEmitter?部分單元測試是爲了確保單元測試的每個部分都運行。

我可以使用的setTimeout自己,但似乎像一個hackish的解決方案。

如果它幫助這裏是我想要測試一些代碼exampler。

... 
function init(param) { 
    ... 
    // run update entities periodically 
    setInterval(this._updateEntities.bind(this, param.containerFull), 
     1000/param.fps); 
    ... 
} 
... 
EntityUpdater.prototype = { 
    ... 
    "_updateEntities": function updateEntitiesfunc(fn) { 
     this._tickEmitter.emit(
      "tick", 
      new dataContainer.DataContainer(this.getEntityCount()) 
      .on(
       "full", fn.bind(this) 
      ) 
     ); 
    }, 
    ... 
} 
... 

(發射將觸發事件)

[編輯]

我開始在https://github.com/ry/node/tree/master/test/simple閱讀一些EvevntEmitter測試的,它可以幫助我瞭解如何去了解這一點。

+0

你看過這篇博文嗎? http://debuggable.com/posts/unit-testing-with-node-js:4b647d40-34e4-435a-a880-3b04cbdd56cb – Tmdean 2010-12-10 21:25:08

+0

是的,我閱讀了博客,這很有幫助,但只涵蓋了幾點。我只注意到測試不會有效地退出,直到循環結束。這仍然讓一次setTimeout和一次事件變得容易。 – Raynos 2010-12-10 21:45:19

+0

我現在才注意到退出塊是關於測試而不是服務器。它是在所有異步操作完成後運行代碼塊的一種方式 – Raynos 2010-12-10 21:56:20

回答

3

個人有什麼幫助過我的最深的是閱讀測試的Node.js的自己(我只看過其中約一半)。

這給了我很好的感覺如何測試異步代碼。

由於@tmdean爲指出如何測試異步代碼的另一個例子。

3

我建議你爲你的測試檢查Jasmine。它專爲在瀏覽器環境之外運行測試而設計,它存根諸如setTimeout之類的調用,爲您提供假時鐘,您可以隨時隨地將時間移動到任何與時間相關的測試中。