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 - 折叠的导航按钮不适用于 Twitter Bootstrap 设计的移动设备

javascript - 在 Javascript 中映射二维数组

javascript - 测试 React Js 根组件

php - 修改 Nginx 正则表达式,使其仅在某些情况下应用

node.js - 在基于 express.js 的应用程序中集中处理错误

javascript - 了解 http 请求在 Mocha 上的工作原理

perl - 我如何将 Perl 的 'prove' 与其他语言的 TAP 生产者一起使用?

javascript - 如何显示 DOM 元素

javascript - ES6 中将对象映射到对象数组

javascript - 为什么 NodeJS 中的这个导出函数不能按我想要的方式工作?