Jest beforeAll()在多个测试文件之间共享

时间:2017-12-27 19:31:48

标签: jestjs

我有一个Node.js项目,我正在使用Jest进行测试。我有几个具有相同设置要求的测试文件。以前,所有这些测试都在一个文件中,所以我只有beforeAll(...)执行常见设置。现在,将测试分成多个文件,似乎我必须将beforeAll(...)代码复制/粘贴到每个文件中。这似乎是不优雅的 - 有更好的方法来做到这一点,理想情况下,我可以只编写我的beforeAll(...) /设置逻辑一次,并且"要求"它来自多个测试文件?请注意,我的测试套件中还有其他测试不需要此设置功能,所以我不想让所有我的测试运行此设置(只是一个特定的子集)测试文件)。

3 个答案:

答案 0 :(得分:10)

如果您使用的是Jest> = 20,则可能需要考虑为需要此常见设置的测试创建自定义jest-environment-node。这将是一个扩展jest-environment-jsdomasync setup()的模块,并实现async teardown()async runScript()@jest-environment my-custom-env来完成此设置工作。

然后,您可以向需要此设置的文件添加{{1}}指令。

有关如何设置此内容的详细信息,请参阅testEnvironment的Jest配置文档;那里有一个简单的例子。

答案 1 :(得分:0)

您可以将beforeAll逻辑移动到一个文件中,并在jest.config.js setupFilesAfterEnv部分中进行引用:

module.exports = {
...
setupFilesAfterEnv: ['<rootDir>/testHelper.ts'],
...
}

https://jestjs.io/docs/en/configuration#setupfilesafterenv-array

答案 2 :(得分:0)

如果需要在所有测试文件之前运行脚本,则可以使用globalSetup

此选项允许使用自定义全局设置模块,该模块导出异步功能,该功能在所有测试套件之前触发一次。

在您的jest.config.js

//jest.config.js
module.exports = {
  ...
  testTimeout: 20000,
  globalSetup: "./setup.js"
};

然后创建一个名为setup.js

的文件
// setup.js
module.exports = async () => {
    
    console.log("I'll be called first before any test cases run");
    //add in what you need to do here

};

Docs