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
文件,删除了 之前
,并开始在我的测试中导入 testSetup.js
:
// fooTest.js
import 'testSetup'; run this first to create window
import 'foo'; // uses window
testSomething();
但这样做的缺点是我必须在每个测试文件中显式包含 testSetup.js
。
我还尝试使用 mocha --require
命令行选项来 require testSetup
(不必在每个测试文件中都需要它)...但事实证明以这种方式加载的文件不会获取 Mocha 全局变量(例如 beforeEach
)。
我的问题是,有什么办法可以两全其美吗?换句话说,有什么方法可以确保 Mocha 测试的某些代码不仅在测试代码之前运行,而且在应用程序代码之前运行......而不必在每个测试文件中显式导入该代码?
最佳答案
您可以像这样调用 Mocha :
mocha --require testSetup.js
其中 testSetup.js
包含您希望在实际测试加载之前运行的所有内容。
或者,您可以在 package.json
旁边创建一个 mocha.opts
文件,其中包含 --require testSetup.js
,每次测试运行时都会自动加载。
关于javascript - Mocha : How Can I Structure Things to Run Setup Code *Before* App Code Loads?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49833762/