单元测试事件驱动的javascript

时间:2010-12-10 20:54:19

标签: javascript unit-testing events asynchronous node.js

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

的好方法

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

我知道我可以将另一个监听器附加到作为测试功能的EventEmitter,但是我如何确保测试功能运行?单元测试的一部分是确保单元测试的每个部分都运行。

我可以自己使用setTimeout,但这似乎是一个hackish解决方案。

如果有帮助,这里有一些我试图测试的示例代码。

...
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测试,这有助于我了解如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

我建议你查看Jasmine进行测试。它是为在浏览器环境之外运行测试而构建的,它会存储诸如setTimeout之类的调用,为您提供一个假时钟,您可以随意调整时间,以便测试任何与时间相关的内容。

答案 1 :(得分:3)

个人最有帮助我的是自己阅读node.js的测试(我只阅读了其中的一半)。

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

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