javascript - 单元测试事件驱动的javascript

标签 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)
            )
        );
    },
    ...
}
...

(emit会触发一个事件)

[编辑]

我开始在 https://github.com/ry/node/tree/master/test/simple 阅读一些 EvevntEmitter 测试它帮助我了解如何解决这个问题。

最佳答案

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

关于javascript - 单元测试事件驱动的javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413221/

相关文章:

JavaScript addEventListener 由于某种原因不起作用

javascript - 积分计算错误

javascript - three.js 和许多形状的内存泄漏

c# - TypeMock 隔离器 : WillThrow() bleeds across unit test boundaries?

java - 在单元测试中使用 SpringRunner 可以吗?

c# - 如何使 Action<param,param2> 与事件的委托(delegate)类型兼容?

javascript - 简单的js框架,DOM。 (模块风格,试图让它像 jQuery 风格)

javascript - Angular 中的 *ngFor 循环时出错

javascript - Cypress 测试框架

haskell - STM 和传出 IO