我正在使用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
配置对象。有没有办法在那里创造这种行为?
答案 0 :(得分:0)
您可以使用before
函数和done
- 回调。这将暂停您的测试,直到调用done
。在before
- 功能中,你可以听mongoose connected
- 事件。像这样:
var mongoose = require('mongoose');
before(function(done){
mongoose.connection.on('connected', done);
});
然后在第一次测试之前放置它。