node.js - 在nodejs中测试后台进程(使用磁带)

标签 node.js testing tdd

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

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

什么是测试这些模块是否正在执行它们应该执行的操作的好方法?

咨询here对于 RSpec 来说,就是模拟这些模块正在做的工作,并确保调用适当的方法。这对我来说很有意义,但在 Node.js 中,由于我的模块不是全局的,我认为我不能在不更改程序架构的情况下模拟函数,以便每个实例都接收它需要的对象实例1.

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

我看到的另一个选择是使用 setTimeout 并尽可能猜测这些模块何时完成它们的工作。

这些似乎都不理想。

我错过了什么吗?后台进程没有测试吗?

最佳答案

由于您谈到的是这些后台组件的集成测试,因此我想到了一些策略。

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

关于node.js - 在nodejs中测试后台进程(使用磁带),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067718/

相关文章:

java - 如何在 Node.js Express 应用程序中运行 Java 代码

ruby-on-rails - 配置 Capybara + Selenium 以通过 SSL 进行测试

c# - 在单元测试中验证方法是否被调用

objective-c - Swift 单元测试方法是否可以处理可选设置为 nil

javascript - 如何在没有 session 的情况下将事件添加到谷歌日历API

javascript - 在另一个 Promise 的回调中捕获 Promise 错误

javascript - 如何获取特定长度数组的所有组合

c# - 如何在 MonoDevelop/.Net 中自动生成单元测试?

java - 如何使用 J-unit 测试简单的 if else 语句?

testing - 满足以下要求的最佳 Web 应用程序测试工具?