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



这是一个关于测试的一般问题,但我将在Node.js的上下文中对其进行阐述。我不太关心特定的技术,但它可能很重要。

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

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

这里给RSpec的建议是模拟这些模块正在做的工作,并确保调用适当的方法。这对我来说是有意义的,但在Node.js中,由于我的模块不是全局的,我认为如果不改变我的程序体系结构,我就无法模拟函数,这样每个实例都可以接收它需要的对象的实例1

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

我看到的另一个选项是使用setTimeout,并对这些模块何时完成工作进行最佳猜测。

这两者似乎都不理想。

我是不是错过了什么?是否未测试后台流程?

由于您正在谈论这些后台组件的集成测试,因此会想到一些策略。

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

最新更新