我有一个Node.js项目,我正在使用Jest进行测试。我有几个具有相同设置要求的测试文件。以前,所有这些测试都在一个文件中,所以我只有beforeAll(...)
执行常见设置。现在,将测试分成多个文件,似乎我必须将beforeAll(...)
代码复制/粘贴到每个文件中。这似乎是不优雅的 - 有更好的方法来做到这一点,理想情况下,我可以只编写我的beforeAll(...)
/设置逻辑一次,并且"要求"它来自多个测试文件?请注意,我的测试套件中还有其他测试不需要此设置功能,所以我不想让所有我的测试运行此设置(只是一个特定的子集)测试文件)。
答案 0 :(得分:10)
如果您使用的是Jest> = 20,则可能需要考虑为需要此常见设置的测试创建自定义jest-environment-node
。这将是一个扩展jest-environment-jsdom
或async 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
};