2010-12-10 71 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之类的调用,为您提供假时钟,您可以随时随地将时间移动到任何与时间相关的测试中。