我有一个名为的文件test/helper.js,用于在Node.js应用程序上运行Mocha测试。我的测试结构如下:
test/helper.js
test/ test/helper.js # global before/after test/api/sometest.spec.js test/models/somemodel.spec.js ... more here
该文件helper.js必须加载,因为它包含我的测试套件的全局挂钩。当我运行Mocha来执行整个测试套件时,如下所示:
helper.js
mocha --recursive test/
该helper.js文件在我的测试之前已加载,并且before挂钩按预期执行。
before
但是,当我仅运行一个特定的测试时,helper.js在测试之前不会加载。这是我的运行方式:
mocha test/api/sometest.spec.js
没有全局before调用,甚至没有console.log('I WAS HERE');。
console.log('I WAS HERE');
那么如何使Mocha 始终 加载helper.js文件?
Mocha没有任何特殊文件的概念,该文件helper.js将在其他文件之前加载。
mocha --recursive由于Mocha 恰好 加载文件的顺序,因此您尝试执行的操作在运行时会起作用。由于helper.js它比其他文件高一个级别,因此将首先加载它。当您为Mocha指定单个文件时,Mocha只会加载 该文件 ,并且您发现自己helper.js根本没有加载文件。
mocha --recursive
所以,你想要做的是加载的文件,以便将设置顶层(“全球”)挂钩(例如before,after等)。选项:
after
您可以以编程方式使用Mocha,然后按所需顺序向其提供文件。
您可以强迫自己始终在列出任何其他文件之前 先 在命令行上指定您的帮助文件。(我不会这样做,但是有可能。)
另一种选择是像我在此答案中详述的那样组织您的套房。基本上,您有一个“顶层”文件,可将套件的其余部分加载到其中。使用这种方法,您将失去在单个文件上运行Mocha的能力,但是您可以--grep用来选择要运行的文件。
--grep
您 不能 使用该-r选项。它会在运行套件之前加载模块,但不幸的是,加载的模块无法访问Mocha可用于您的测试的任何测试接口,因此无法设置挂钩。
-r