单元测试事件驱动javascript

单元测试事件驱动javascript,javascript,unit-testing,events,asynchronous,node.js,Javascript,Unit Testing,Events,Asynchronous,Node.js,我正在用node.js编写一个服务器端应用程序,并希望包括单元测试。我正在努力解决的一件事是单元测试EventEmitter和setInterval/setTimout 我有哪些选项可以对异步服务器端javascript进行单元测试 我知道我可以将另一个监听器附加到EventEmitter上,它是测试函数,但是我如何才能保证测试函数能够运行呢?单元测试的一部分是确保单元测试的每个部分都能运行 我自己也可以使用setTimeout,但这似乎是一个黑客的解决方案 如果有帮助的话,这里有一些示例代码,

我正在用node.js编写一个服务器端应用程序,并希望包括单元测试。我正在努力解决的一件事是单元测试
EventEmitter
setInterval/setTimout

我有哪些选项可以对异步服务器端javascript进行单元测试

我知道我可以将另一个监听器附加到EventEmitter上,它是测试函数,但是我如何才能保证测试函数能够运行呢?单元测试的一部分是确保单元测试的每个部分都能运行

我自己也可以使用setTimeout,但这似乎是一个黑客的解决方案

如果有帮助的话,这里有一些示例代码,我正在尝试测试

...
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)
            )
        );
    },
    ...
}
...
(发射将触发事件)

[编辑]


我开始在上阅读一些EvevntEmitter测试,它帮助我了解如何进行这些测试。

我建议您查看测试。它是为在浏览器环境之外运行测试而构建的,它会存根调用,例如
setTimeout
,为您提供一个假时钟,您可以利用它在空闲时向前移动时间,以测试任何与时间相关的内容。

就我个人而言,对我帮助最大的是阅读node.js本身的测试(我只阅读了大约一半)

这让我对如何测试异步代码有了很好的感觉


感谢@tmdean指出了如何测试异步代码的另一个示例。

您看过这篇博文了吗?是的,我读了博客,它很有帮助,但只涵盖了几点。我只是注意到,直到循环完成,测试才真正退出。这仍然留下了一个简单的一次性设置超时&一次性事件。我现在才注意到退出块是关于测试的,而不是关于服务器的。这是一种在所有异步操作完成后运行代码块的方法