【问题标题】:Running a set of actions before every test-file in mocha在 mocha 中的每个测试文件之前运行一组操作
【发布时间】:2013-09-06 09:35:18
【问题描述】:

我最近开始使用 mocha 来测试我的 expressjs 服务器。 我的测试被分成多个文件,其中大多数包含一些重复的段(主要是在将所有固定装置加载到数据库的语句之前等),这真的很烦人。

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

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

【问题讨论】:

    标签: express mocha.js


    【解决方案1】:

    mocha 测试的常用功能分解为三个基本级别。如果您想为一堆测试加载一次固定装置(并且您已将每个测试编写为独立的),请使用before 函数在文件顶部加载固定装置。如果您每次都需要重新初始化灯具,也可以使用beforeEach 函数。

    第二个选项(相关)是将通用功能提取到一个单独的文件或一组文件中并需要该文件。

    最后,请注意 mocha 有一个root level hook

    您也可以选择任何文件并添加“根”级挂钩。例如,在所有 describe() 块之外添加 beforeEach()。这将导致 beforeEach() 的回调在任何测试用例之前运行,无论它位于哪个文件中(这是因为 Mocha 有一个隐含的 describe() 块,称为“根套件”)。

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

    before(function () {
      process.env.NODE_ENV = 'test';
      require('../../app.js');
    });
    

    (这里我们不需要done(),因为require 是同步的。)也就是说,服务器只启动一次,不管有多少不同的测试文件包含这个根级别的before 函数。

    以这种方式拆分的好处是我们可以运行 npm test 来运行所有测试,或者在任何特定文件或任何特定文件夹,或任何特定测试或一组测试上运行 mocha(使用 it.only和 describe.only) 并且所选测试的所有先决条件都将运行。

    【讨论】:

    • 是的,我这样做是为了调试。每个test/ 文件夹都有一个根级before(){debugger;},这样我就可以使用debug-brk 启动,并且知道它会在所有内容加载完毕但运行之前停止
    • @dankohn 在使用before() 时会引发错误ReferenceError: before is not defined 你知道可能是什么问题吗?
    • @Max 看看this 看看发生了什么。总结 -r somefile 在 Mocha 设置之前由 CLI 评估 => 未定义。我不太精通 Mocha,但 mocho.opts 可能是一个更好的解决方案。如果你真的想让它与 -r somefile.js 一起工作,那么添加 --delay 并将你的设置包装在dealyed-oot-suite
    【解决方案2】:

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

    将你的公用文件放在init.js 中,然后运行

    mocha -r `./init`
    

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

    你也可以把它放在你的tests目录下的mocha.opts,并让它的内容是

    --require ./init
    

    【讨论】:

    • 我这样做了,它抱怨说“之前”没有定义。我基本上是在运行所有测试之前定义一个全局“之前”。我还包括了“摩卡”,但它不起作用。有什么想法吗?
    • @Salman Hasrat Khan 看看this 看看发生了什么。总结 -r somefile 在 Mocha 设置之前由 CLI 评估 => 未定义。我不太精通 Mocha,但 mocho.opts 可能是一个更好的解决方案。如果你真的想让它与 -r somefile.js 一起工作,那么添加 --delay 并将你的设置包装在dealyed-oot-suite
    • 你的意思是用反引号代替引号吗?这使得 shell 将文件评估为 shell 脚本,而不是 JavaScript 代码。然后它会尝试打开该 shell 脚本输出给出的文件,以便将其传递给 Mocha。
    猜你喜欢
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2014-10-21
    • 2019-09-28
    • 1970-01-01
    • 2017-04-24
    • 2020-03-14
    • 2015-11-28
    相关资源
    最近更新 更多