与Supertest的Mongoose开放连接问题

时间:2013-11-09 06:03:06

标签: javascript node.js mongoose supertest

我无法运行多个Supertest / Mocha测试,因为我收到错误Error: Trying to open unclosed connection. - 我发现这个post建议循环并检查连接状态。想知道是否有更好的方法?也许是最近在Supertest中添加的东西来处理这个问题。

3 个答案:

答案 0 :(得分:2)

在您的Mocha测试中添加before函数以连接到MongoDB,如此

var mongoose = require('mongoose');

describe('My test', function() {
    before(function(done) {
       if (mongoose.connection.db) return done();
       mongoose.connect('mongodb://localhost/puan_test', done);
    });
});

答案 1 :(得分:0)

好的 - 非常接近。我要做的就是删除describe方法调用并将一个before()调用放在一个公共文件中,用于所有测试 - 超级或直接mocha单元测试。

var db;

// Once before all tests - Supertest will have a connection from the app already while others may not
before(function(done) {
  if (mongoose.connection.db) {
    db = mongoose.connection;
    return done();
  }
  db = mongoose.connect(config.db, done);
});

// and if I wanted to load fixtures before each test
beforeEach(function (done) {
  fixtures.load(data, db, function(err) {
    if (err) throw (err);
    done();
  })
});

通过省略describe()调用上面的内容,它可以用于所有测试。

答案 2 :(得分:0)

// Also you can use the 'open' event to call the 'done' callback
// inside the 'before' Mocha hook.

    before((done) => {
        mongoose.connect('mongodb://localhost/test_db');
        mongoose.connection
            .once('open', () => {
                done();
            })
            .on('error', (err) => {
                console.warn('Problem connecting to mongo: ', error);
                done();
            });

    });