拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Gutenberg 端到端测试演进史:从 @wordpress/e2e-tests 到 Playwright 迁移全解析

Gutenberg 端到端测试演进史从 wordpress/e2e-tests 到 Playwright 迁移全解析【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenberg本篇文章以wordpress/e2e-tests包的 CHANGELOG.md 为骨架完整梳理 Gutenberg 端到端E2E测试体系从 2019 年立项到 2026 年的演进脉络Puppeteer/Jest 时代的关键配置能力、向 Playwright 迁移的决策节点、以及该包转型为测试插件与 mu-plugins 仓库后的职责划分。读者阅读后将能准确理解 Gutenberg E2E 测试栈的版本约束、环境变量语义、破坏性变更清单以及当前 Playwright 测试套件的组织方式与运行入口。一、包定位与生命周期概览wordpress/e2e-tests是 Gutenberg 多包仓库monorepo中的一个 npm 包其package.json中的描述明确为 Test plugins and mu-plugins for E2E tests in WordPresspackages/e2e-tests/package.json。包内结构由三部分组成见 README.md/plugins/供 E2E 测试使用的测试插件如meta-box.php、iframed-block.php、interactive-blocks.php、rtl.php、format-api.php等几十个 fixture 插件/mu-plugins/用于测试环境配置的必须使用插件Must-Use Plugins/assets/测试资源如图片等。package.json中记录了版本约束底线node 18.12.0、npm 8.19.2peerDependencies 要求jest 29、react ^18 || ^19、react-dom ^18 || ^19并保留了y-websocket等开发依赖用于协作类测试场景。从 CHANGELOG 看该包在 2019-03-06 发布 1.0.0Initial release一路迭代至 9.20.02026-09-10。CHANGELOG 头部注释还提示了维护规范Learn how to maintain this file说明每个版本条目都遵循固定的 changelog 撰写纪律。二、Puppeteer 时代的核心测试能力1.x - 6.x早期版本中该包是真正的 E2E 测试运行库其能力沉淀在 1.x 至 6.x 的 CHANGELOG 条目中2.1 性能仿真THROTTLE_CPU与DOWNLOAD_THROUGHPUT1.9.02019-12-19新增了THROTTLE_CPU和DOWNLOAD_THROUGHPUT两个环境变量配置选项PR #18770。这是 Puppeteer 时代用于模拟真实网络与设备性能的手段THROTTLE_CPU通过 Chrome DevTools Protocol 对 CPU 进行倍率节流用于复现低端设备上的渲染与交互性能DOWNLOAD_THROUGHPUT限制网络下载吞吐量用于测试资源加载、懒加载、媒体上传等依赖网络速度的场景。这类能力后来在 Playwright 中对应context.throttleCPU()与route网络拦截等机制但在当时是通过 Puppeteer 的 CDP 接口注入的。2.2 无障碍集成Axe 引擎1.2.02019-05-21引入了 AxeAccessibility EngineAPI 与 E2E 测试套件的集成。Axe 是业界常用的自动化无障碍检测库Gutenberg 将其接入 E2E 流程使得每个关键编辑器流程在功能断言之外还能输出 WCAG 相关的可访问性问题报告与仓库中独立的 docs/contributors/accessibility-testing.md 无障碍测试指南形成配套。2.3 动效与快照策略2.5.02021-09-09新增对prefers-reduced-motion: reduce的模拟PR #34132让测试环境默认尊重减少动态效果系统偏好避免动画导致的测试不稳定2.4.02021-07-29修复了一个 bug若之前的快照失败测试会提前跳出bail out避免失败快照不触发截图的问题PR #33448从而保证失败现场可追溯。2.4 最低 Node.js 版本的三次抬升CHANGELOG 清楚记录了运行环境要求随生态演进而逐步升级的过程版本时间Node.js 最低版本要求2.0.02021-01-2112PR #279345.0.02022-08-2414PR #431418.0.02024-05-3118.12.0PR #61930对齐 LTS 版本这一阶梯式抬升也体现在当前 package.json 的engines.node: 18.12.0字段中与 8.0.0 的破坏性变更一一对应。三、向 Playwright 迁移的关键节点7.x - 8.x这是 CHANGELOG 中最具技术史价值的段落记录了测试基建的一次重大转向。3.1 4.0.0官方宣布弃用与迁移项目4.0.02022-04-08的 Breaking Changes 明确写道社区正在进行将 E2E 测试迁移到 Playwright 的专项issue #38851该包被标记为 deprecated在完全迁移完成前只接受 bug 修复。从这一刻起新功能的开发重心开始转移到 Playwright 体系。3.2 依赖迁移Puppeteer → Puppeteer-Core → 彻底移除依赖变化的轨迹本身就是迁移史的缩影3.0.02022-01-27peerpuppeteer替换为puppeteer-core 11PR #36040测试改为连接已启动的浏览器实例7.0.02023-03-15peerjest从27抬升到29PR #47388同步跟进 Jest 28/29 的破坏性变更9.16.02026-07-14移除过时的puppeteer-corepeer 依赖声明该包不再附带基于 Puppeteer 的测试issue #60357。至此Puppeteer 相关依赖在包内彻底清零这与仓库当前以 Playwright 为主的测试架构完全吻合。3.3 8.0.0process.env→globalThis的全局标识替换8.0.02024-05-31包含两个影响面较大的破坏性变更process.env.IS_GUTENBERG_PLUGIN替换为globalThis.IS_GUTENBERG_PLUGIN。这意味着所有基于process.env的构建系统都必须更新PR #61486。该标识用于在 Gutenberg 插件环境与 WordPress 核心环境之间切换行为——Gutenberg 插件往往会提前启用尚未合入核心的功能。Node.js 最低版本抬升至 18.12.0见 2.4 节。从仓库其余部分可以印证这一变量仍在大量使用在根目录 changelog.txt 中可检索到IS_GUTENBERG_PLUGIN相关的多条记录例如Use static value for IS_GUTENBERG_PLUGIN env setupPR #79201、Fix IS_GUTENBERG_PLUGIN env var override in build configurationPR #76605以及多个Remove IS_GUTENBERG_PLUGIN checks的清理工作PR #75699、#76853、#59873说明它一直是区分Gutenberg 插件/核心构建形态的关键开关。四、9.0.0 之后职责转型为测试插件仓库4.1 破坏性变更移除测试配置9.0.02025-11-12是职责分水岭。该版本移除了包内的测试配置理由是该包已弃用E2E 测试全面迁移到 Gutenberg 仓库根目录下的 Playwright 测试。这与 README.md 的说明一致The E2E tests themselves have been migrated to Playwright and are now located in/test/e2e/。4.2 现阶段的增量变化9.16.02026-07-14还放宽了 React peer 依赖范围到^18 || ^19PR #80024以同时支持 React 18 与 React 19 环境配合仓库中 tools/react-18 与 tools/react-19 并存的双版本测试策略。从包名与 README 定位看wordpress/e2e-tests如今的角色是为仓库根目录的 Playwright E2E 测试提供测试插件fixtures与 mu-plugins 的载体本身不再包含可执行的测试用例或测试运行配置。五、当前 Playwright E2E 测试体系的实际形态为印证测试已迁往根目录test/e2e/可以查看该目录下的运行配置。test/e2e/playwright.config.ts 直接继承了wordpress/scripts提供的playwright.config.js基础配置并做了面向 Gutenberg 的定制webServer.command使用wp-env-test启动 WordPress 测试环境workers: 1串行运行保证测试隔离reporter 在 CI 与本地分支采用不同组合CI 下包含github、blob 与flakiness/playwright上报通过testIgnore排除websocket-only协作测试交由单独的 test/e2e/playwright.rtc-websocket.config.ts 配置运行针对 Linux 下 WebKit headless 无法接收自定义dataTransfer的问题配置注释明确建议使用xvfb-run npm run test:e2e运行见 test/e2e/playwright.config.ts。5.1 测试插件如何被加载packages/e2e-tests内的插件与 mu-plugins 通过wp-env自动挂载进测试环境。以几个代表性的 mu-plugins 为例可以直观理解其环境配置职责packages/e2e-tests/mu-plugins/normalize-theme.php移除主题的editor-color-palette与editor-font-sizes支持归一化不同主题下的颜色与字号保证测试断言跨主题一致packages/e2e-tests/mu-plugins/disable-remote-patterns.php通过should_load_remote_block_patterns过滤器返回 false屏蔽远程模式的网络请求降低测试不确定性packages/e2e-tests/mu-plugins/nocache-headers.php从 WordPress 默认的Cache-Control头中剔除no-store作为规避 Playwright 等待networkidle超时问题的 workaround。这类 mu-plugins 正是 CHANGELOG 之外、理解该包当前价值的直接素材它们以极小的 PHP 插件形式精确控制测试环境的确定性因素。六、对测试开发者的实践启示将 CHANGELOG 的变更记录与仓库现状结合可以提炼出对 E2E 测试开发者的几条操作性结论新测试一律落在test/e2e/wordpress/e2e-tests包已不再承载测试用例新增 E2E 测试应在根目录 test/e2e 下编写并遵循 test/e2e/playwright.config.ts 的配置约定。环境标识使用globalThis.IS_GUTENBERG_PLUGIN任何需要区分 Gutenberg 插件形态与核心形态的构建判断都应使用globalThis而非process.env这是 8.0.0 起生效的硬性约束。运行环境底线Node.js ≥ 18.12.0、npm ≥ 8.19.2测试运行需 Jest ≥ 29 与 React 18/19 任一版本。测试确定性优先沿用prefers-reduced-motion: reduce模拟、CPU/网络节流参数的思想将动效与网络因素排除在断言之外需要调整缓存或远程加载行为时可参考本包 mu-plugins 的过滤器实现方式。历史断言的更新若迁移旧测试需注意 Puppeteer 时代依赖的THROTTLE_CPU/DOWNLOAD_THROUGHPUT环境变量属于旧体系应改用 Playwright 的节流与路由拦截 API 等价实现。七、小结wordpress/e2e-tests的 CHANGELOG 浓缩了 Gutenberg 测试工程七年间最关键的架构决策从 Puppeteer Jest 起步逐步引入无障碍检测、动效模拟、性能仿真随后在 2022 年宣布弃用并迁移到 Playwright2024 年完成环境标识与运行时升级2025 年正式剥离测试配置转型为纯粹提供测试插件与 mu-plugins 的 fixture 仓库。理解这份变更史不仅能帮助读者厘清旧文档中残留环境变量的含义更能准确把握当前 Gutenberg Playwright 测试体系test/e2e的边界与约定——这对维护大型编辑器 E2E 测试套件具有直接的工程参考价值。【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenberg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门