javascript - 如何让 Mocha 加载定义全局 Hook 或实用程序的 helper.js 文件?

标签 javascript node.js mocha.js

我有一个名为 test/helper.js 的文件,用于在我的 Node.js 应用程序上运行 Mocha 测试。我的测试结构如下:

test/
test/helper.js    # global before/after
test/api/sometest.spec.js
test/models/somemodel.spec.js
... more here

文件 helper.js 必须加载,因为它包含我的测试套件的全局 Hook 。当我像这样运行 Mocha 来执行整个测试套件时:

mocha --recursive test/

helper.js 文件在我的测试之前加载,并且我的 before Hook 按预期执行。

但是,当我只运行一个特定的测试时,helper.js 在测试之前没有加载。这就是我运行它的方式:

mocha test/api/sometest.spec.js

没有调用全局 before,甚至没有调用 console.log('I WAS HERE');

那么我怎样才能让 Mocha总是 加载我的 helper.js 文件?

最佳答案

Mocha 没有任何名为 helper.js 的特殊文件的概念,它会在其他文件之前加载。

当您运行 mocha --recursive 时,您尝试执行的操作会起作用,因为 Mocha 发生 加载文件的顺序。因为 helper.js 比其他文件高一级,所以首先加载它。当您为 Mocha 指定单个文件时,Mocha 只会加载 此文件,而正如您所发现的,您的 helper.js 文件根本不会加载。

因此,您要做的是加载一个文件,以便它设置顶级(“全局”) Hook (例如 beforeafter 等)。选项:

  1. 您可以使用 Mocha programmatically并按照您想要的顺序提供文件。

  2. 你可以强制自己总是在命令行中指定你的帮助文件first,然后再列出任何其他文件。 (我不会这样做,但有可能。)

  3. 另一种选择是像我在 this answer 中详述的那样组织您的套件。 .基本上,您有一个“顶级”文件将套件的其余部分加载到其中。使用这种方法,您将失去在单个文件上运行 Mocha 的能力,但您可以使用 --grep 来选择正在运行的内容。

不能使用 -r 选项。它在运行套件之前加载一个模块,但不幸的是,加载的模块无法访问 Mocha 为您的测试提供的任何测试接口(interface),因此它无法设置 Hook 。

关于javascript - 如何让 Mocha 加载定义全局 Hook 或实用程序的 helper.js 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191243/

相关文章:

javascript - gun db中公共(public)空间、用户空间、卡住空间的简单例子

node.js - Jade 无法使用 ng-view 指令正确渲染元素

node.js - express文件上传返回400错误

javascript - Mocha JS 测试 - 一种对 sinon spy 进行回调的方法

javascript - 在 ajax 中显示 400(错误请求)

javascript - React 如何保留渲染的组件

javascript - 删除源文件后 Node.js 应用程序仍然可以运行

javascript - 跟踪/记录 promise

node.js - 如何修复请求错误: Error: connect ETIMEDOUT while running Mocha JS/NodeJS test from behind proxy

javascript - 如何在javascript中隐藏游戏回合之间的元素?