0

我正在使用“磁带”为 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();
});
4

1 回答 1

2

磁带进程保持活动的主要原因是 MongoDB 连接未关闭。在所有测试结束时关闭连接的最简单方法是创建一个空白测试,其中包含关闭 MongoDB 连接的说明。以下是一个示例,在本例中使用 Mongoose:

var test = require('tape');
var mongoose = require('mongoose');

test('test', function (t) {
    t.pass('Example');
    t.end();
});

test('finish', function (t) {
    mongoose.disconnect();
    t.pass('closing db connection');
    t.end();
});

test.onFinish(fn)如果问题确实是 MongoDB 连接,则根据文档使用更合适的方法来处理它:

当所有磁带测试在磁带即将打印测试摘要之前完成时,onFinish 挂钩将被调用。

于 2016-03-29T21:16:19.120 回答