Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jestjs Jest beforeAll()在多个测试文件之间共享_Jestjs - Fatal编程技术网

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

Jestjs Jest beforeAll()在多个测试文件之间共享,jestjs,Jestjs,我有一个Node.js项目,我正在使用Jest进行测试。我有几个测试文件具有相同的设置要求。以前,所有这些测试都在一个文件中,所以我只是在(…)之前有一个执行公共设置的。现在,随着测试被分割成多个文件,似乎我必须在(…)之前将代码复制/粘贴到每个文件中。这似乎不雅观-有没有更好的方法来做到这一点,理想情况下,我可以在(…)/设置逻辑之前只编写一次,然后从多个测试文件中“要求”它?请注意,我的测试套件中还有其他测试不需要此设置功能,因此我不想让我的所有测试都运行此设置(只是测试文件的特定子集)。如

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

如果您使用Jest>=20,您可能希望为需要此公共设置的测试创建自定义的
Jest环境。这将是一个扩展
jest环境节点
jest环境jsdom
的模块,并实现
async setup()
async teardown()
async runScript()
来完成此设置工作

然后,您可以将
@jest-environment my-custom-env
指令添加到需要此设置的文件中


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

您可以将
之前的
逻辑移动到一个文件中,并在jest.config.js
setupFilesAfterEnv
部分中引用它:

module.exports={
...
SetupFileAfterEnv:['/testHelper.ts'],
...
}

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

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

在您的
jest.config.js中

//jest.config.js
module.exports={
...
测试超时:20000,
全局设置:“./setup.js”
};
然后创建一个名为
setup.js的文件

//setup.js
module.exports=async()=>{
log(“在运行任何测试用例之前,将首先调用我”);
//在此添加您需要执行的操作
};

一个警告:我们最近尝试使用环境对公共节点模块进行一些初始化,但意识到在步骤之前运行环境和运行测试代码之间需要重置缓存。有问题的模块初始化了一些模块本地变量,这些变量在env安装程序运行后被清除,因此无法正常工作。这是一种气味,我们的单例模块设计得很糟糕。但这不能跨文件工作。即使根据他们自己的文档,
注意:TestEnvironment是沙盒的。每个测试套件将在其自己的测试环境中触发设置/拆卸。
这在每个测试文件之前,而不是在测试文件之间共享