【问题标题】:How should I initialize a Mongoose connection in a Mocha unit test?我应该如何在 Mocha 单元测试中初始化 Mongoose 连接?
【发布时间】:2015-06-06 19:58:17
【问题描述】:

我一直在到处寻找这个。有些人似乎这样做

mongoose.connect('mongodb://localhost/test');

继续他们的describe 电话。但是,异步等待呢?

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  // yay!
});

我应该如何在 Mocha 测试中使用这个连接?我应该将所有测试都放在回调中吗?我应该将等待连接代码包装在单元测试中吗? describes 和 its 之间的连接是否会持续存在?

【问题讨论】:

    标签: node.js mongodb unit-testing mongoose mocha.js


    【解决方案1】:

    Mongoose connect 函数支持回调。

    由于before的Mocha异步版本也接受回调(通常称为done),只需将其传递给connect函数,如:

    describe("Your test", function () {
    
      before(function (done) {
        mongoose.connect('mongodb://localhost/test', done);
      });
      // here you can write your tests
    });
    

    这样,连接将在describe 范围内保持活动状态,并放置before 方法。

    但是,如果您想将您的连接用于测试文件中的所有测试,只需在所有 describe 之前调用它:

    before(function (done) {
      mongoose.connect('mongodb://localhost/test', done);
    });
    
    describe("first suite", function () {
      // do your tests
    });
    
    describe("second suite", function () {
      // do your tests
    });
    
    // and so on
    

    【讨论】:

    • 我几乎所有的测试都需要这个连接。我应该把所有测试的describes 放在一个像这样的大describe 中吗?我看到有很多顶级describes 的测试。如果我在此describe 之后创建一个单独的describe,连接会持续吗?
    • 哦!我可以在顶级描述之前做一个before,对吗?我没有意识到我可以像这样通过done。现在这很有意义。这应该是beforeEach吗?
    • 不,只是一个before,否则您只是根据it 初始化一个新连接。 Mongoose 导出一个单例,因此您只需执行一次,每次导入模型时(连接前或连接后),它仍应共享相同的底层 mongodb 客户端。
    • 所以我应该能够将 Rodrigo 代码中的 before 移动到 describe 之外,并且所有 describes 将共享同一个客户端?
    • 其实,如何保存对这个连接的引用以备后用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多