我有一个名为 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 (例如 before
、after
等)。选项:
您可以使用 Mocha programmatically并按照您想要的顺序提供文件。
你可以强制自己总是在命令行中指定你的帮助文件first,然后再列出任何其他文件。 (我不会这样做,但有可能。)
另一种选择是像我在 this answer 中详述的那样组织您的套件。 .基本上,您有一个“顶级”文件将套件的其余部分加载到其中。使用这种方法,您将失去在单个文件上运行 Mocha 的能力,但您可以使用
--grep
来选择正在运行的内容。
您不能使用 -r
选项。它在运行套件之前加载一个模块,但不幸的是,加载的模块无法访问 Mocha 为您的测试提供的任何测试接口(interface),因此它无法设置 Hook 。
关于javascript - 如何让 Mocha 加载定义全局 Hook 或实用程序的 helper.js 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191243/