我使用mocha-mongoose在测试之间自动清除mongo。在文档中,它表示需要spec文件中的模块或spec helper中的全局模块。
按照规范执行它很有效,但我想从mocha.opts中执行此操作以保持代码DRY。
要求使用mocha.opts并不起作用。 Mongo未在规格之间清除
mocha.opts:
--require ./test/common.js
--reporter spec
--ui bdd
--recursive
--colors
--timeout 60000
--slow 300
common.js:
require('mocha-mongoose')('mongodb://your-mongodb-url-here');
在每个规范文件中要求它
test.js
var should = require('chai').should()
, require('mocha-mongoose')('mongodb://your-mongodb-url-here');
describe("Example test", function() {
it(' Mongo will be automatically clear all collections',);
});
如何在mocha.opts中正确地要求mocha-mongoose
,以便我不必在每次测试中重复它?
答案 0 :(得分:2)
它的工作方式是检查beforeEach
并将自己注册为beforeEach
挂钩。这是relevant source:
if (!options.noClear && !beforeEachRegistered) {
if ('function' == typeof beforeEach && beforeEach.length > 0) {
// we're in a test suite that hopefully supports async operations
beforeEach(clearDB);
beforeEachRegistered = true;
}
}
问题是beforeEach
加载的模块无法使用--require
。因此,您无法使用--require
。
我唯一可以想象mocha-mongoose
的作者用"你的规范助手"将是一个模块,其中包含每个规范所需的一组实用程序函数:您只需将require('mocha-mongoose')(...);
添加到每个规范中,而不是将其添加到每个规范所需的模块中。