Jestjs 在所有Jest测试中重用相同的Puppeter实例 问题

Jestjs 在所有Jest测试中重用相同的Puppeter实例 问题,jestjs,functional-testing,puppeteer,Jestjs,Functional Testing,Puppeteer,我用玩笑+木偶演员来代替卡斯佩斯。将所有内容放在一个文件中非常有效: beforeAll(异步()=>{ //从Puppeter获取“页面”和“浏览器”实例 }); 描述(‘测试A’,()=>{ //测试 }); 描述('测试B',()=>{ //测试 }); 毕竟(异步()=>{ //关闭浏览器 }); 现在,我真的不想把所有的东西都保存在一个文件里。维护和运行部分测试(比如“测试A”)都比较困难 我试过的 我看了一些笑话文档,读了一些。它将是完美的,但它在每个测试文件之前运行。我不想要这个

我用玩笑+木偶演员来代替卡斯佩斯。将所有内容放在一个文件中非常有效:

beforeAll(异步()=>{
//从Puppeter获取“页面”和“浏览器”实例
});
描述(‘测试A’,()=>{
//测试
});
描述('测试B',()=>{
//测试
});
毕竟(异步()=>{
//关闭浏览器
});
现在,我真的不想把所有的东西都保存在一个文件里。维护和运行部分测试(比如“测试A”)都比较困难

我试过的 我看了一些笑话文档,读了一些。它将是完美的,但它在每个测试文件之前运行。我不想要这个,因为木偶演员的设置需要很多时间。我想重复使用同一个浏览器实例,并只支付一次安装费用,无论我将运行多少个测试文件

所以,我想:

//设置木偶演员
等待要求(“测试”)(页面、浏览器、配置);
等待请求('testB')(页面、浏览器、配置);
//清理
这解决了模块化问题,重用了相同的浏览器实例,但不允许单独运行测试

最后,我偶然发现了创建一个定制的可能性。这听起来很好,但没有很好的文档记录,所以我甚至不确定是每个测试文件创建env实例,还是每个Jest运行创建env实例。Stable API还缺少一个
setup
方法,我可以在其中设置Puppeter(我必须在不能异步的构造函数中进行设置)

我为什么这么问 因为我不太会开玩笑,所以我可能错过了一些明显的东西。在我深入研究这一点之前,我想在这里问一下。

更新(2018年2月):Jest现在有了官方版本,其特点是在所有测试中重用一个浏览器实例:)

它已经被回答了,但是为了清楚起见,我们把它贴在这里

从Jest v22开始,您可以创建一个异步的、具有
setup()
/
teardown()
挂钩的:

从“jest环境节点”导入节点环境;
类CustomEnvironment扩展了NodeEnvironment{
异步设置(){
等待super.setup();
等待木偶演员();
}
异步拆卸(){
等待撕裂的木偶演员();
等待super.teardown();
}
}
并在Jest配置中使用它:

{
  "testEnvironment": "path/to/CustomEnvironment.js"
}

值得注意的是,Jest在沙盒(单独的
vm
上下文)中并行测试,并且需要为每个工作人员生成新的测试环境(通常是您机器的CPU内核数)

谢谢!我只是试了一下,效果很好。我正在扩展NodeEnvironment,因为我的测试中不需要任何浏览器API。更新了示例以反映您的评论,因为通常不会将E2E测试环境与单元/集成测试混合使用。谢谢我们刚刚发布了稳定的JEST22版本,所以您现在可以自由使用异步测试环境,而不必成为beta测试人员!谢谢:)UDPATE:我们已经添加了
globalSetup
globalTeardown
挂钩,并编译了这个可爱的示例,在所有测试中重用一个浏览器实例:)。见: