摩卡测试运行器(grunt-mocha-test)需要定时问题

时间:2014-08-09 02:12:07

标签: javascript node.js asynchronous

我正在使用grunt-mocha-test包在Node中运行我的单元测试。以下是grunt-mocha-test的配置对象在我的gruntfile中的显示方式:

mochaTest: {
  src: watchFiles.serverTests,
  options: {
    reporter: 'spec',
    require: 'server.js'
  }
}

watchFiles.serverTests是一个文件路径数组。 server.js引导我的应用。在server.js中,我有以下内容:

var db = mongoose.connect(config.db, function(err) {
  // Setup express, etc. here
  // Set module exports
});

以前看起来像这样:

var db = mongoose.connect(config.db);
// Setup express, etc. here (some of which reference db)
// Set module exports

问题是Express需要成功连接数据库才能正确初始化。没有异步数据库连接,我遇到了一些奇怪的错误。所以,我切换到异步设置。但是,现在,当我需要server.js内部的异步调用时,测试运行器会在应用程序完全启动之前触发Mocha测试。因此,我需要找到一条幸福的媒介:

var db = mongoose.connect(config.db, function(err) {
  // Setup express, etc. here
  // Set module exports
});

// Do something here that waits for the above to complete,
// so that the module is loaded synchronously.

作为替代方案,我可以将函数传递给mochaTest配置对象。有没有办法在那里创造这种行为?

1 个答案:

答案 0 :(得分:0)

您可以使用before函数和done - 回调。这将暂停您的测试,直到调用done。在before - 功能中,你可以听mongoose connected - 事件。像这样:

var mongoose = require('mongoose');

before(function(done){
   mongoose.connection.on('connected', done);
});

然后在第一次测试之前放置它。