Mocha:如何在* App代码加载之前构建运行安装代码的东西?

时间:2018-04-14 16:41:22

标签: javascript mocha

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测试的某些代码不仅在测试代码之前运行,而且在应用程序代码之前运行...而不必在每个测试文件中显式导入该代码?

1 个答案:

答案 0 :(得分:1)

您可以像这样调用mocha:

0xa9

其中mocha --require testSetup.js 包含您希望在实际测试加载之前运行的所有内容。

或者,您可以在testSetup.js旁边创建一个包含mocha.opts的{​​{1}}文件,该文件将在每次测试运行时自动加载。