Jest Puppeteer 测试在一起运行时失败(同步)

Posted

技术标签:

【中文标题】Jest Puppeteer 测试在一起运行时失败(同步)【英文标题】:Jest Puppeteer tests fail when running together (synchronously) 【发布时间】:2020-11-18 06:41:48 【问题描述】:

使用的技术:

npm 开玩笑 开玩笑的木偶师

如果我一个一个地运行我的测试,它们会单独通过

$ npm test test/file.to.test.js

...

Test Suites: 1 passed, 1 total
Tests:       6 passed, 6 total

但是,如果我作为一个组运行我的测试,那么错误就会很猖獗

$ npm test

...

Test Suites: 6 failed, 6 total
Tests:       88 failed, 17 todo, 4 passed, 109 total

问题

我的情况似乎与某种 jest/puppeteer 缓存或 chrome 会话共享有关。不管怎样,我该如何进一步调试?

额外

在写这个问题时,我发现使用参数--runInBand(来自this answer)可以使所有测试都通过,但它们是按顺序运行的,这使得测试需要更长的时间——通常开玩笑测试是并行运行的。

设置

package.json

"test": "set NODE_ENV=test && jest --runInBand --detectOpenHandles --forceExit",

jest-puppeteer.config.js

module.exports = 
    launch: 
        devtools: true, // allows for use of 'debugger;' in tests
        // executablePath: '/usr/bin/chromium-browser',
        headless: true,
        defaultViewport: 
            width: 1024,
            height: 768,
            //isMobile: true,
            //hasTouch: true,
        ,
        ignoreDefaultArgs: ['--disable-extensions'],
        args: [
            '--enable-font-antialiasing',
            '--font-render-hinting=medium',
            '--disable-gpu',
            '--disable-dev-shm-usage',
            '--disable-setuid-sandbox',
            '--no-first-run',
            '--no-sandbox',
            '--no-zygote',
            '--single-process',

            "--renderer",
            "--no-service-autorun",
            "--no-experiments",
            "--no-default-browser-check",
            "--disable-extensions",
        ]
    ,
    // server: 
    //     command: "npm run serve",
    //     port: 9000,
    //     launchTimeout: 180000
    // ,
    browser: 'chromium',
    browserContext: 'default'
;

【问题讨论】:

失败的具体原因是什么?为什么你认为它们可能是由会话共享引起的?我希望这可能是服务器处理同时请求的方式。所有这些 chrome args 都是故意添加的吗? @EstusFlask 按顺序回答问题:失败的原因似乎充其量是随机的;与实际的浏览器会话相比,我更关注浏览器页面状态(我的单词使用率很低); ;该项目涵盖 Windows 10、Windows 10 WSL (ubuntu 18.04) OSX 10.14、10.15,因此这是迄今为止适用于每种操作系统安排的所有参数,而不是在任何给定操作系统上中断的参数。 【参考方案1】:

我阅读了很多关于此的内容,虽然我不确定为什么会发生这种情况,但有几个非常无缝的解决方法

--runInBand 或 --maxConcurrency=2

【讨论】:

以上是关于Jest Puppeteer 测试在一起运行时失败(同步)的主要内容,如果未能解决你的问题,请参考以下文章

markdown 为网站设置Puppeteer和Jest测试

在 Visual Studio Code 编辑器中完全禁用 Jest 测试运行器的自动运行

使用 webpack-hot-middleware 配置环境时,Jest 测试失败

将 jest 与 web3 和 ganache 一起使用时测试很慢

在 Jest 中测试失败时如何打印请求和响应?

运行 Jest 时替换 `require.context`