如何在 mocha.opts 中正确地 require 一个模块?

How can you correctly require a module in mocha.opts?

我正在使用 mocha-mongoose 在测试之间自动清除 mongo。在文档中,它说在您的规范文件中或在您的规范助手中全局需要该模块。

按照规范执行它效果很好,但我想从 mocha.opts 开始执行以保持我的代码干燥。

用 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,这样我就不必在每次测试中都重复它?

它的工作方式是检查 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 的作者对 "your spec helper" 的意思是一个模块,其中包含每个规范所需的一堆实用函数:而不是添加 require('mocha-mongoose')(...); 对于每个规范,您只需将其添加到每个规范所需的模块中一次。