你怎么能正确地在mocha.opts中需要一个模块?

时间:2015-03-19 19:01:57

标签: node.js mongodb mongoose mocha

我使用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,以便我不必在每次测试中重复它?

1 个答案:

答案 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')(...);添加到每个规范中,而不是将其添加到每个规范所需的模块中。