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

Posted

技术标签:

【中文标题】如何正确地在 mocha.opts 中需要一个模块?【英文标题】:How can you correctly require a module in mocha.opts? 【发布时间】:2015-05-23 01:24:04 【问题描述】:

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

【问题讨论】:

【参考方案1】:

它的工作方式是检查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')(...);,你'd 只需将其添加到每个规范所需的模块中。

【讨论】:

这正是mocha-mongoose(我)的作者的意思!

以上是关于如何正确地在 mocha.opts 中需要一个模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地在try / except块中引发异常

如何使用 useEffect 正确地在数组中获取和保存数据

如何正确地在 PHP 中对字符串进行 URL 编码?

如何正确地在SOE中输出日志信息

如何让 OAuth 2.0 正确地在我的自定义 API .net 核心中使用外部 API

如何在给定键和值数组的情况下有效地在 Eloquent 中进行大规模更新