【发布时间】:2016-03-30 05:40:13
【问题描述】:
我正在使用“磁带”为 nodejs 应用程序创建单元测试。当我运行测试时,该过程被永远阻塞。当我深入挖掘时,我发现如果我运行“nodejs mainapp.js”,这个过程并没有结束。这也阻止了单元测试的运行。
如果注册了事件,nodejs 进程似乎不会结束。就我而言,创建 mongo 或 redis 连接或使用节点模块(例如“node-cache”)会导致这种情况。很难想象所有这些模块都可以避免。 关于如何解决问题的任何建议。我的测试用例非常简单,所以那里有问题。
顺便说一句,我已经验证 nodejs 不会因为 http.listen 而被阻止。有人可能会争论使用模型,我不打算这样做。
test('dummy test', function(t) {
t.equal('hello world', 'hello world', 'Yes hello world = hellow world');
t.end();
});
【问题讨论】:
-
您是否尝试过在测试结束时进行适当的清理,例如关闭与数据库的网络连接等?除非您告诉它,否则 Node 不知道您何时完成此类连接。
-
在应用程序中,不,我不关闭连接。我没有在测试代码中创建任何连接。
-
任何创建的连接都会阻止 Node 退出,这是正常行为。因此,除非您关闭连接(或者创建模拟连接),否则 Node 将不知道您何时完成了它们,并且一旦您的测试运行,该进程将不会退出。
-
谢谢@robertklep。我不得不强制关闭所有网络连接和其他注册到某种事件(如节点缓存)的模块。现在它工作正常。
标签: node.js mongodb node.js-tape