在mocha中的每个测试文件之前运行一组操作

Pro*_*ome 14 mocha.js express

我最近开始使用mocha来测试我的expressjs服务器.我的测试被分成多个文件,其中大多数都包含一些重复的段(大多数是在将所有灯具加载到DB之后的语句之前),这真的很烦人.

我想我可以将它们全部导出到一个文件并在每次测试中导入它们,但我想知道是否有一些更优雅的解决方案 - 例如运行具有所有设置命令的某个文件,以及另一个包含所有设置命令的文件拆除命令.

如果有人知道答案会很棒:)

Dan*_*ohn 20

分解mocha测试的常用功能有三个基本级别.如果你想为一堆测试加载一些灯具(并且你已经将每个测试写成独立的),使用该before函数加载文件顶部的灯具.beforeEach如果需要每次重新初始化灯具,也可以使用功能.

第二个选项(相关)是将常用功能提取到单独的文件或文件集中并要求该文件.

最后,请注意mocha有一个root套件:

你也可以选择任何文件并添加"root"级挂钩,例如done()在befores 之外添加,然后回调将在任何测试用例之前运行,无论文件是什么.这是因为Mocha有一个没有名称的root套件.

我们使用它来启动Express服务器一次(我们使用环境变量,使其在与开发服务器不同的端口上运行):

before(function () {
  process.env.NODE_ENV = 'test';
  require('../../app.js');
});
Run Code Online (Sandbox Code Playgroud)

(我们不需要npm test这里因为require是同步的.)这就是,服务器只启动一次,无论有多少不同的测试文件包含这个根级before函数.

以这种方式拆分的优点是我们可以运行beforeEach运行所有测试,或在任何特定文件或任何特定文件夹或任何特定测试或测试集上运行mocha(使用it.only和describe.only)和将运行所选测试的所有先决条件.


dei*_*tch 12

为什么不mocha -r <module>甚至使用mocha.opts?

将您的公共文件放入,init.js然后运行

mocha -r `./init`
Run Code Online (Sandbox Code Playgroud)

这将导致mocha ./init.js在加载任何mocha测试文件之前运行和加载.

您也可以将它mocha.opts放在您的测试目录中,并将其内容设置为

--require ./init
Run Code Online (Sandbox Code Playgroud)

  • 我做了这个,它抱怨说'之前'没有定义.在所有测试运行之前,我基本上定义了一个全局'之前'.我还包括'摩卡',但它不起作用.有任何想法吗? (4认同)