问题
我正在用 Jest + Puppeteer 替换 CasperJS。将所有内容放在一个文件中效果很好:
beforeAll(async () => {
// get `page` and `browser` instances from puppeteer
});
describe('Test A', () => {
// testing
});
describe('Test B', () => {
// testing
});
afterAll(async () => {
// close the browser
});
现在,我真的不想将所有内容都保存在一个文件中。仅运行部分测试(例如,仅“测试 A”)更难维护,也更难运行。
我试过的
我查看了 Jest 文档并阅读了setupScript。这将是完美的,但它在每个测试文件之前运行。我不想要这个,因为 puppeteer 设置需要很多时间。无论我将运行多少个测试文件,我都想重复使用相同的浏览器实例并只支付一次设置成本。
于是,我想到了:
// setup puppeteer
await require('testA')(page, browser, config);
await require('testB')(page, browser, config);
// cleanup
这解决了模块化,重用相同的浏览器实例,但不允许我单独运行测试。
最后,我偶然发现了创建自定义testEnviroment的可能性。这听起来不错,但没有很好的文档记录,所以我什至不确定是每个测试文件还是每个 Jest 运行都创建了 env 实例。稳定的 API 也缺少一种setup
我可以设置 puppeteer 的方法(我必须在不能异步的构造函数中这样做)。
为什么我要问
由于我是 Jest 的新手,我可能会遗漏一些明显的东西。在我深入研究之前,我想在这里问一下。