TLDR:有没有办法在应用程序代码加载之前运行Mocha测试设置代码(不仅仅是在测试代码运行之前),而无需导入该设置每个测试文件中的代码?
背景
我有一个客户端应用程序,我试图用Mocha进行测试。该应用程序中的一个模块可以实现以下功能:
// foo.js
const initialReduxState = { currentLocation: window.location };
问题是,window
在测试环境中不存在,所以我必须为我的测试模拟一个:
// testSetup.js
before(() => {
const { window } = new JSDOM(`...`);
global.window = window;
});
但如果我实际上像我刚才那样使用before
,它就不会工作,因为testSetup代码将加载,然后应用程序代码(需要window
)将加载,然后测试设置中的before
将运行(为时已晚)。
所以我把它直接添加到一个"主测试加载器"文件,没有之前:
// masterTestLoader.js
const { window } = new JSDOM(`...`);
beforeEach(() => {
global.window = window;
});
import 'fooTest';
但如果我这样做,我只能运行整个套件;我无法运行单独的测试文件。所以我改回了testSetup.js
文件,删除了before
,并开始在我的测试中导入testSetup.js
:
// fooTest.js
import 'testSetup'; run this first to create window
import 'foo'; // uses window
testSomething();
但缺点是我必须在每个测试文件中明确包含testSetup.js
。
我还尝试使用mocha --require
命令行选项来要求testSetup
(不需要在每个测试文件中都要求它)...但是事实证明以这种方式加载的文件不是&# 39;得到Mocha全局(如beforeEach
)。
我的问题是,有没有办法让两全其美?换句话说,有没有办法确保Mocha测试的某些代码不仅在测试代码之前运行,而且在应用程序代码之前运行...而不必在每个测试文件中显式导入该代码?
答案 0 :(得分:1)
您可以像这样调用mocha:
0xa9
其中mocha --require testSetup.js
包含您希望在实际测试加载之前运行的所有内容。
或者,您可以在testSetup.js
旁边创建一个包含mocha.opts
的{{1}}文件,该文件将在每次测试运行时自动加载。