javascript - puppeteer 在运行所有 Jest 测试之前关闭浏览器

标签 javascript node.js unit-testing jestjs puppeteer

重现步骤

  • git 克隆 https://github.com/anikethsaha/docsify
  • git checkoute2e-test-puppeteer`
  • npm 我
  • npm 运行测试:e2e
  • 检查 sideBar.spec.js
  • 的测试

运行 122 个测试中的 31 个测试将会失败

告诉我们您的环境:

什么步骤会重现该问题? npm 运行测试:e2e

请包含重现问题的代码。

  1. https://github.com/anikethsaha/docsify/blob/e2e-test-puppeteer/e2e/tests/sideBar.spec.js 2. 3.

预期结果是什么? 它应该运行所有测试用例 122

会发生什么? 但相反,它只运行 31 个测试,之后浏览器关闭,然后剩余的 91 个测试没有运行

上下文

我正在使用live-server运行一个将为我的文件提供服务的服务器,并且它是在自定义 Jest 环境中完成的。 我有一个 sideBar.spec.js 文件,它通过单击所有侧边栏链接来测试所有侧边栏链接,然后使用 jest-image-snapshot 拍摄快照。 。 在此测试中,我使用 page.click 方法单击每个可能的 anchor 链接。 它没有运行剩余的 91 个测试。 我将超时时间增加到 300 秒,但它仍然在此之前停止。

我看到了一个奇怪的行为,那就是侧边栏带有一个切换按钮。所以默认情况下侧边栏是打开的。但在退出关闭浏览器之前,IDK 但它会切换侧边栏以将其关闭,然后关闭浏览器。 检查 sideBar.spec.js 的测试 您可以在此处找到测试的行为 https://travis-ci.org/docsifyjs/docsify/jobs/631003978?utm_medium=notification&utm_source=github_status

最佳答案

在执行所有测试之前浏览器不会关闭,事实并非如此。 在 beforeAll 钩子(Hook)中添加参数 browser = wait puppeteer.launch({headless: false}),当您看到发生了什么时总是更容易。

我用你的代码玩了一段时间,并在控制台中检查了你尝试单击的选择器是否确实存在,但看起来它们并不存在。 (您也可以在您提供的日志中清楚地看到它: Node 不可见或不是 HTMLElement 等)

例如:

const cdnIds = [
 'latest-version',
 'specific-version',
 'compressed-file',
 'other-cdn'
]
cdnIds.forEach(id => {
 test('go to #cdn?id=' + id, async done => {
   await page.click(`a.section-link[href='#/cdn?id=${id}']`)
   const ss = await page.screenshot()
   expectThres(ss)
   done()
 })
})

没有匹配的选择器,例如 a.section-link[href='#/cdn?id=other-cdn']a.section-link[href^=' #/cdn'] <-- 第二个应该匹配每个 cdnIds 数组。我想你需要重写你的测试。祝你好运

关于javascript - puppeteer 在运行所有 Jest 测试之前关闭浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59643104/

相关文章:

javascript - 在 javascript 中使用 var 而不是 let 的一些原因是什么?

javascript - 使用 nodejs 调用 Web 服务

node.js - 带有 primeng 404 问题的 angular-cli@webpack

java - 使用 spring-test-mvc 进行 Spring Controller 单元测试失败

javascript - D3 : text transitioning in typewriter style

javascript - Express:将元素推送到模型的数组中

javascript - 为什么 W3C 验证程序在此 JS 代码上失败?

perl - 有Perl的jUnit吗?

asp.net-mvc - 我如何对这种方法进行单元测试?

canvas 元素中的 JavaScript 球不跟随光标