在nodejs中测试后台进程(使用磁带)

时间:2014-02-27 11:52:34

标签: node.js testing tdd

这是关于测试的一般问题,但我将在Node.js的上下文中构建它。我并不关心特定的技术,但它可能很重要。

在我的应用程序中,当我的Web服务器收到请求时,我有几个模块被调用。对于其中一些模块,我在调用它们之前关闭了请求。

测试这些模块正在做他们应该做的事情的好方法是什么?

RSpec的建议here是模拟这些模块正在进行的工作,并确保调用适当的方法。这对我来说很有意义,但是在Node.js中,由于我的模块不是全局的,我不认为我不能在不改变程序体系结构的情况下模拟函数,以便每个实例都接收它需要的对象实例 1 < / SUP>

[1]这是一个众所周知的编程范例,但我现在不记得它的名字了。

我看到的另一个选项是使用setTimeout,并在这些模块完成工作时尽量猜测。

这些似乎都不理想。

我错过了什么吗?后台进程未经过测试吗?

1 个答案:

答案 0 :(得分:0)

由于您正在谈论这些背景组件的集成测试,因此可以想到一些策略。

  1. 将所有异步性从测试模式的操作中取出。我想象你有一些排队过程(这可能是一个错误的假设),你把工作投入队列,然后你的模块拿起那项工作并完成他们的任务。您可以重新设计测试工具,使测试工具作为排队机制,您可以直接控制模块执行的时间。
  2. 重构您的模块以采用某种next回调函数。它们最终会像Express的中间件层或async each函数的工作方式一样运行,但是在每个模块中,您传递一些在该模块的任务完成时调用的回调。一旦所有模块报告,您就可以检查程序的状态。
  3. 正是你已经提出的建议 - 等待一段时间,如果还没有完成,请考虑失败。 Mocha 有点这样做,因为如果给定的测试超过了可定义的阈值,那么它就是失败。我不喜欢这种方式,因为如果你添加更多测试,他们都必须等待相同的时间。