如何在jest中从setupFilesAfterEnv钩子启动Playwright浏览器,以便可以使用TypeScript在测试文件中访问它?

isr3a4wc  于 2023-03-04  发布在  TypeScript
关注(0)|答案(1)|浏览(105)

在Jest中,我想从setupFilesAfterEnv启动浏览器,而不是在每个测试文件中重复这一步,使用Jest和Playwright。尽管启动了浏览器,并且全局变量可用于测试,但我得到错误:'类型错误:newContext不是一个函数“。我正在使用Babel在Jest中使用TS
我的设置

jest.配置cjs

const config = {
    testTimeout: 20000,
    setupFilesAfterEnv: ["<rootDir>/setup.ts"]
};

module.exports = config;

设置.ts

import {chromium} from "playwright-chromium";

global.browser = chromium.launch({headless: false});
global.my_val = "10"

测试测试ts

describe("Test", () => {
    let context;
    let page;

    beforeEach(async () => {
        console.log("Global 10")
        console.log(global.my_val)
        context = await global.browser.newContext();
        page = await context.newPage();
    })

    test(...)

浏览器启动正常,我可以在进程列表中看到它(尽管headless:false,但它不在GUI模式下启动)。
console.log(global.my_val)正确打印10,因此在此上下文中可以看到setup中的全局变量。
但这个错误阻止我做任何事情:

TypeError: Cannot read properties of undefined (reading 'newContext')

      28 |
      29 |     beforeEach(async () => {
    > 30 |         context = await global.browser.newContext();
         |                                        ^
      31 |         page = await context.newPage();
      32 |     })
      33 |
gudnpqoy

gudnpqoy1#

好的,似乎只有在JS中testEnvironment才可能。如果使用TS节点,则TS可能
解决方案:

const { chromium } = require('playwright-chromium');
const NodeEnvironment = require('jest-environment-node').TestEnvironment;

class CustomEnvironment extends NodeEnvironment {
    constructor(config, context) {
        super(config, context);
    }

    async setup() {
        await super.setup();
        this.global.browser = await chromium.launch({headless: false});
    }

    async teardown() {
        await super.teardown();
        await this.global.browser.close();
    }

}

module.exports = CustomEnvironment;

相关问题