【问题标题】:Mongo database fails to be ready every other test runMongo 数据库在所有其他测试运行时都无法准备好
【发布时间】:2014-12-06 07:15:10
【问题描述】:

我正在使用 Mocha 在我的 Express(好吧,Keystone)服务器上运行测试,该服务器使用 Mongoose/MongoDB。在 before Mocha 钩子中,我删除了数据库,然后初始化模型,然后加载了一些固定装置,所有这些都在 async.series 调用中控制,因此我确信这些事情是按顺序发生的。

其中一个测试每隔一次运行就会失败。测试进行 API 调用,对数据库执行地理查询。它失败了:

․{ [MongoError: Unable to execute query: error processing query: ns=test.locations limit=50 skip=0
Tree: GEONEAR  field=lnglat.geo maxdist=5000 isNearSphere=0
Sort: {}
Proj: {}
 planner returned error: unable to find index for $geoNear query] name: 'MongoError' }
․TypeError: Cannot read property 'length' of undefined

然后在下一次运行时成功。然后下一个它失败了。等等,总是如此。

有什么方法可以检查数据库是否已准备好在其上运行这些测试?对于奖励积分,究竟是什么导致了这种持续的变化?

【问题讨论】:

    标签: node.js mongodb mongoose mocha.js


    【解决方案1】:

    假设您的代码组织与此类似:

    server.js

    var mongoose = require('mongoose');
    var express = require('express');
    
    var db = mongoose.connect('mongodb://localhost/my-database');
    var app = express();
    
    db.connection.once('connected', function() {
    
        require('./lib/api_routes')(app);
        app.listen(3000, function() {
            console.log('listening on 3000');
        }
    
        app.emit('dbLoaded');
    });
    
    exports = module.exports = app;
    

    lib/api_routes.js

    module.exports = function(app) {
        app.get('/api/my_route', function(req, res) {
            ...
        }
    }
    

    test/my_test.js

    var app = require('../server');
    
    before(function(done) {
        app.on('dbLoaded', function() {
            console.log('db is connected');
            done();
        }
    }
    
    before(function() {
        ... your test initialization code
    }
    

    Express 继承 the 'events' module。您的数据库连接与db.connection.once() 做同样的事情。它只会执行......一旦连接了数据库!然后在该函数中发出一个事件,让您的before() 钩子知道执行它的回调,开始测试套件中的下一个钩子/测试。

    附带说明,您不需要异步库来异步运行您的测试设置。如果你给你的before() 钩子传递一个回调,Mocha 会自己异步运行它们。您可以为要运行的每个设置任务设置一个before() 块。

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 1970-01-01
      • 2017-09-01
      • 2021-10-29
      相关资源
      最近更新 更多