Skip to content

test: Update example packages to use playwright instead of jest + puppeteer - #27964

Open
Joshua Smithrud (Josmithr) wants to merge 23 commits into
microsoft:mainfrom
Josmithr:takeover/pr-26619-playwright
Open

test: Update example packages to use playwright instead of jest + puppeteer#27964
Joshua Smithrud (Josmithr) wants to merge 23 commits into
microsoft:mainfrom
Josmithr:takeover/pr-26619-playwright

Conversation

@Josmithr

@Josmithr Joshua Smithrud (Josmithr) commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Migrate the repository's example packages and related DevTools end-to-end tests from Jest + Puppeteer to Playwright. This removes the Jest-Puppeteer configuration and type workaround package, adds shared Playwright configuration, and updates build and CI wiring to run and publish Playwright test results.

The client-utils browser hash tests bundle and execute the production browser entry point so regressions in the browser implementation cannot be masked by copied test logic.

To facilitate the new Playwright configurations, Tinylicious now supports selecting its listening port via command line argument.

AB#78597

@github-actions github-actions Bot added area: examples Changes that focus on our examples area: tools area: build Build related issues area: repo Repo related work dependencies Pull requests that update a dependency file area: website area: tests Tests to add, test infrastructure improvements, etc base: main PRs targeted against main branch labels Aug 13, 2026
Comment thread build-tools/packages/build-cli/src/library/repoPolicyCheck/npmPackages.ts Outdated
@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Hi! Thank you for opening this PR. Want me to review it?

Based on the diff (7621 lines, 266 files), I've queued these reviewers:

  • Correctness — logic errors, race conditions, lifecycle issues
  • Security — vulnerabilities, secret exposure, injection
  • API Compatibility — breaking changes, release tags, type design
  • Performance — algorithmic regressions, memory leaks
  • Testing — coverage gaps, hollow tests

How this works

  • Adjust the reviewer set by ticking/unticking boxes above. Reviewer toggles alone don't trigger anything.

  • Tick Start review below to dispatch the review fleet.

  • After review finishes, tick Start review again to request another run — it auto-resets after each dispatch.

  • This comment updates as new commits land; your reviewer selections are preserved.

  • Start review

@Josmithr
Joshua Smithrud (Josmithr) marked this pull request as ready for review August 14, 2026 19:52
Copilot AI lite review requested due to automatic review settings August 14, 2026 19:52
@Josmithr
Joshua Smithrud (Josmithr) requested a review from a team as a code owner August 14, 2026 19:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the repository’s example packages (and related devtools e2e apps) from jest + puppeteer to Playwright, updates CI/pipeline wiring to run the new Playwright test suite, and removes now-unneeded puppeteer/jest-puppeteer configs and type workarounds.

Changes:

  • Add Playwright configs and update example/devtools test code to use @playwright/test.
  • Remove Jest + Puppeteer configs/dependencies (and the internal @types/jest-environment-puppeteer workaround package).
  • Wire up CI/build tooling to recognize and run test:playwright (pipeline + repo policy checks + fluid-build task graph).

Reviewed changes

Copilot reviewed 257 out of 264 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tools/pipelines/build-client.yml Adds a Playwright CI test job to the client pipeline.
packages/tools/devtools/devtools-view/package.json Bumps Playwright dependency version used by devtools view tooling.
packages/tools/devtools/devtools-test-app/tsconfig.json Removes Jest/Puppeteer types from TS config (Playwright migration).
packages/tools/devtools/devtools-test-app/playwright.config.ts Adds Playwright test runner configuration for devtools test app.
packages/tools/devtools/devtools-test-app/jest.config.cjs Removes Jest configuration (no longer used).
packages/tools/devtools/devtools-test-app/jest-puppeteer.config.cjs Removes jest-puppeteer configuration (no longer used).
packages/tools/devtools/devtools-browser-extension/webpack.test.cjs Adjusts ts-loader settings so test entrypoints can be built.
packages/tools/devtools/devtools-browser-extension/playwright.config.ts Adds Playwright config for browser extension e2e tests.
packages/tools/devtools/devtools-browser-extension/jest.config.cjs Removes Jest configuration (no longer used).
packages/tools/devtools/devtools-browser-extension/jest-puppeteer.config.cjs Removes jest-puppeteer configuration (no longer used).
packages/tools/devtools/devtools-browser-extension/e2e-tests/tsconfig.json Updates TS config for Playwright-based e2e tests.
packages/tools/devtools/devtools-browser-extension/e2e-tests/tsconfig.cjs.json Removes CJS-only test tsconfig (no longer needed).
packages/test/types_jest-environment-puppeteer/package.json Removes internal typings workaround package metadata.
packages/test/types_jest-environment-puppeteer/index.d.ts Removes internal typings workaround declarations.
packages/common/client-utils/src/test/playwright/tsconfig.json Adds TS build output config for Playwright tests in client-utils.
packages/common/client-utils/src/test/mocha/buffer.spec.ts Updates test comment to reflect new comprehensive test location.
packages/common/client-utils/src/test/jest/tsconfig.cjs.json Removes Jest test build config (no longer used).
packages/common/client-utils/playwright.config.ts Adds Playwright config for client-utils Playwright tests.
packages/common/client-utils/jest.config.cjs Removes Jest config from client-utils.
packages/common/client-utils/jest-puppeteer.config.cjs Removes Puppeteer config from client-utils.
packages/common/client-utils/eslint.config.mts Points eslint TS projects at the new Playwright test tsconfig.
fluidBuild.config.cjs Adds test:playwright and includes it in test:unit dependencies.
examples/view-integration/view-framework-sampler/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/view-integration/view-framework-sampler/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/view-integration/view-framework-sampler/tests/diceRoller.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/view-integration/view-framework-sampler/README.md Updates testing docs to use Playwright CLI.
examples/view-integration/view-framework-sampler/playwright.config.ts Adds Playwright config for the example.
examples/view-integration/view-framework-sampler/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/view-integration/view-framework-sampler/jest.config.cjs Removes Jest config for the example.
examples/view-integration/view-framework-sampler/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/view-integration/external-views/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/view-integration/external-views/README.md Updates testing docs to use Playwright CLI.
examples/view-integration/external-views/playwright.config.ts Adds Playwright config for the example.
examples/view-integration/external-views/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/view-integration/external-views/jest.config.cjs Removes Jest config for the example.
examples/view-integration/external-views/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/view-integration/container-views/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/view-integration/container-views/README.md Updates testing docs to use Playwright CLI.
examples/view-integration/container-views/playwright.config.ts Adds Playwright config for the example.
examples/view-integration/container-views/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/view-integration/container-views/jest.config.cjs Removes Jest config for the example.
examples/view-integration/container-views/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/version-migration/tree-shim/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/version-migration/tree-shim/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/version-migration/tree-shim/tests/treeShim.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/version-migration/tree-shim/README.md Updates testing docs to use Playwright CLI.
examples/version-migration/tree-shim/playwright.config.ts Adds Playwright config for the example.
examples/version-migration/tree-shim/jest.config.cjs Removes Jest config for the example.
examples/version-migration/tree-shim/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/version-migration/separate-container/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/version-migration/separate-container/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/version-migration/separate-container/README.md Updates testing docs to use Playwright CLI.
examples/version-migration/separate-container/playwright.config.ts Adds Playwright config for the example.
examples/version-migration/separate-container/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/version-migration/separate-container/jest.config.cjs Removes Jest config for the example.
examples/version-migration/separate-container/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/version-migration/same-container/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/version-migration/same-container/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/version-migration/same-container/README.md Updates testing docs to use Playwright CLI.
examples/version-migration/same-container/playwright.config.ts Adds Playwright config for the example.
examples/version-migration/same-container/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/version-migration/same-container/jest.config.cjs Removes Jest config for the example.
examples/version-migration/same-container/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/version-migration/live-schema-upgrade/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/version-migration/live-schema-upgrade/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/version-migration/live-schema-upgrade/tests/diceRoller.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/version-migration/live-schema-upgrade/README.md Updates testing docs to use Playwright CLI.
examples/version-migration/live-schema-upgrade/playwright.config.ts Adds Playwright config for the example.
examples/version-migration/live-schema-upgrade/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/version-migration/live-schema-upgrade/jest.config.cjs Removes Jest config for the example.
examples/version-migration/live-schema-upgrade/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/utils/bundle-size-tests/package.json Drops Puppeteer dependency from bundle-size test utilities.
examples/service-clients/azure-client/todo-list/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/service-clients/azure-client/todo-list/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/service-clients/azure-client/todo-list/test/todoList.spec.ts Converts Jest/Puppeteer test to Playwright test.
examples/service-clients/azure-client/todo-list/README.md Updates testing docs to use Playwright CLI.
examples/service-clients/azure-client/todo-list/playwright.config.ts Adds Playwright config for the example.
examples/service-clients/azure-client/todo-list/jest.config.cjs Removes Jest config for the example.
examples/service-clients/azure-client/todo-list/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/service-clients/azure-client/external-controller/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/service-clients/azure-client/external-controller/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/service-clients/azure-client/external-controller/tests/diceRoller.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/service-clients/azure-client/external-controller/README.md Updates testing docs to use Playwright CLI.
examples/service-clients/azure-client/external-controller/playwright.config.ts Adds Playwright config for the example.
examples/service-clients/azure-client/external-controller/jest.config.cjs Removes Jest config for the example.
examples/service-clients/azure-client/external-controller/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/playwright.config.base.ts Adds a shared base Playwright configuration for examples.
examples/external-data/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/external-data/tsconfig.test.json Adds a no-emit TS project for type-checking Playwright tests/config.
examples/external-data/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/external-data/tests/taskList.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/external-data/tests/taskData.test.ts Migrates unit-style tests to Playwright’s test runner APIs.
examples/external-data/README.md Updates testing docs to use Playwright CLI.
examples/external-data/playwright.config.ts Adds Playwright config (sequential workers due to fixed ports).
examples/external-data/jest.config.cjs Removes Jest config for the example.
examples/external-data/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/external-data/eslint.config.mts Updates eslint parser project config to include test tsconfigs.
examples/data-objects/todo/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/data-objects/todo/playwright.config.ts Adds Playwright config for the example.
examples/data-objects/todo/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/data-objects/todo/jest.config.cjs Removes Jest config for the example.
examples/data-objects/todo/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/data-objects/table-tree/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/data-objects/table-tree/tests/table.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/data-objects/table-tree/playwright.config.ts Adds Playwright config for the example.
examples/data-objects/table-tree/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/data-objects/table-tree/jest.config.cjs Removes Jest config for the example.
examples/data-objects/table-tree/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/data-objects/multiview/container/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/data-objects/multiview/container/tests/container.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/data-objects/multiview/container/playwright.config.ts Adds Playwright config for the example.
examples/data-objects/multiview/container/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/data-objects/multiview/container/jest.config.cjs Removes Jest config for the example.
examples/data-objects/multiview/container/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/data-objects/clicker/tsconfig.json Updates TS types list for Playwright (drops Jest/Puppeteer).
examples/data-objects/clicker/README.md Updates testing docs to use Playwright CLI.
examples/data-objects/clicker/playwright.config.ts Adds Playwright config for the example.
examples/data-objects/clicker/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/data-objects/clicker/jest.config.cjs Removes Jest config for the example.
examples/data-objects/clicker/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/data-objects/canvas/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/data-objects/canvas/test/canvas.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/data-objects/canvas/playwright.config.ts Adds Playwright config for the example.
examples/data-objects/canvas/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/data-objects/canvas/jest.config.cjs Removes Jest config for the example.
examples/data-objects/canvas/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/benchmarks/bubblebench/shared-tree/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/benchmarks/bubblebench/shared-tree/tests/demo.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/benchmarks/bubblebench/shared-tree/README.md Updates testing docs to use Playwright CLI.
examples/benchmarks/bubblebench/shared-tree/playwright.config.ts Adds Playwright config for the example.
examples/benchmarks/bubblebench/shared-tree/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/benchmarks/bubblebench/shared-tree/jest.config.cjs Removes Jest config for the example.
examples/benchmarks/bubblebench/shared-tree/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/benchmarks/bubblebench/ot/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/benchmarks/bubblebench/ot/tests/demo.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/benchmarks/bubblebench/ot/src/main.ts Tweaks runtime guard error behavior for uninitialized tree access.
examples/benchmarks/bubblebench/ot/README.md Updates testing docs to use Playwright CLI.
examples/benchmarks/bubblebench/ot/playwright.config.ts Adds Playwright config for the example.
examples/benchmarks/bubblebench/ot/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/benchmarks/bubblebench/ot/jest.config.cjs Removes Jest config for the example.
examples/benchmarks/bubblebench/ot/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/benchmarks/bubblebench/experimental-tree/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/benchmarks/bubblebench/experimental-tree/tests/demo.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/benchmarks/bubblebench/experimental-tree/README.md Updates testing docs to use Playwright CLI.
examples/benchmarks/bubblebench/experimental-tree/playwright.config.ts Adds Playwright config for the example.
examples/benchmarks/bubblebench/experimental-tree/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/benchmarks/bubblebench/experimental-tree/jest.config.cjs Removes Jest config for the example.
examples/benchmarks/bubblebench/experimental-tree/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/benchmarks/bubblebench/baseline/tsconfig.json Updates TS types list and include behavior for Playwright.
examples/benchmarks/bubblebench/baseline/tests/demo.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/benchmarks/bubblebench/baseline/README.md Updates testing docs to use Playwright CLI.
examples/benchmarks/bubblebench/baseline/playwright.config.ts Adds Playwright config for the example.
examples/benchmarks/bubblebench/baseline/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/benchmarks/bubblebench/baseline/jest.config.cjs Removes Jest config for the example.
examples/benchmarks/bubblebench/baseline/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/tree-comparison/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/apps/tree-comparison/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/tree-comparison/tests/treeComparison.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/apps/tree-comparison/README.md Updates testing docs to use Playwright CLI.
examples/apps/tree-comparison/playwright.config.ts Adds Playwright config for the example.
examples/apps/tree-comparison/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/tree-comparison/jest.config.cjs Removes Jest config for the example.
examples/apps/tree-comparison/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/task-selection/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/apps/task-selection/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/task-selection/tests/diceRoller.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/apps/task-selection/README.md Updates testing docs to use Playwright CLI.
examples/apps/task-selection/playwright.config.ts Adds Playwright config for the example.
examples/apps/task-selection/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/task-selection/jest.config.cjs Removes Jest config for the example.
examples/apps/task-selection/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/staging/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/apps/staging/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/staging/tests/staging.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/apps/staging/README.md Updates testing docs to use Playwright CLI.
examples/apps/staging/playwright.config.ts Adds Playwright config for the example.
examples/apps/staging/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/staging/jest.config.cjs Removes Jest config for the example.
examples/apps/staging/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/presence-tracker/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/presence-tracker/playwright.config.ts Adds Playwright config (starts tinylicious + client server).
examples/apps/presence-tracker/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/presence-tracker/jest.config.cjs Removes Jest config for the example.
examples/apps/presence-tracker/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/diceroller/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/diceroller/README.md Updates testing docs to use Playwright CLI.
examples/apps/diceroller/playwright.config.ts Adds Playwright config for the example.
examples/apps/diceroller/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/diceroller/jest.config.cjs Removes Jest config for the example.
examples/apps/diceroller/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/data-object-grid/webpack.test.cjs Ensures ts-loader emits test entrypoints for webpack test build.
examples/apps/data-object-grid/tsconfig.json Updates TS config/types list for Playwright + eslint type-checking.
examples/apps/data-object-grid/tests/dataObjectGrid.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/apps/data-object-grid/playwright.config.ts Adds Playwright config for the example.
examples/apps/data-object-grid/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/data-object-grid/jest.config.cjs Removes Jest config for the example.
examples/apps/data-object-grid/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/contact-collection/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/apps/contact-collection/tsconfig.json Removes Jest/Puppeteer types; narrows TS include to src for Playwright.
examples/apps/contact-collection/tests/contactCollection.test.ts Converts Jest/Puppeteer test to Playwright test.
examples/apps/contact-collection/README.md Updates testing docs to use Playwright CLI.
examples/apps/contact-collection/playwright.config.ts Adds Playwright config for the example.
examples/apps/contact-collection/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/contact-collection/jest.config.cjs Removes Jest config for the example.
examples/apps/contact-collection/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/collaborative-textarea/webpack.test.cjs Adjusts ts-loader to emit test entrypoints for webpack test build.
examples/apps/collaborative-textarea/tsconfig.test.json Adds no-emit TS project for tests/config type-checking.
examples/apps/collaborative-textarea/tsconfig.json Updates TS types list to drop Jest/Puppeteer and include Node.
examples/apps/collaborative-textarea/tests/index.ts Updates relative imports to .js-style ESM import paths.
examples/apps/collaborative-textarea/README.md Updates testing docs to use Playwright CLI.
examples/apps/collaborative-textarea/playwright.config.ts Adds Playwright config for the example.
examples/apps/collaborative-textarea/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/collaborative-textarea/jest.config.cjs Removes Jest config for the example.
examples/apps/collaborative-textarea/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/claims-example/tsconfig.json Updates TS config for Playwright migration (types list needs adjustment).
examples/apps/claims-example/README.md Updates testing docs to use Playwright CLI.
examples/apps/claims-example/playwright.config.ts Adds Playwright config for the example.
examples/apps/claims-example/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/claims-example/jest.config.cjs Removes Jest config for the example.
examples/apps/claims-example/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
examples/apps/blobs/tsconfig.json Updates TS config/types list for Playwright migration.
examples/apps/blobs/README.md Updates testing docs to use Playwright CLI.
examples/apps/blobs/playwright.config.ts Adds Playwright config for the example.
examples/apps/blobs/package.json Switches test scripts/deps from Jest+Puppeteer to Playwright.
examples/apps/blobs/jest.config.cjs Removes Jest config for the example.
examples/apps/blobs/jest-puppeteer.config.cjs Removes jest-puppeteer config for the example.
build-tools/packages/build-tools/src/fluidBuild/npmDepChecker.ts Updates depcheck ignore/type handling to drop puppeteer/jest-specific types.
build-tools/packages/build-cli/src/library/repoPolicyCheck/npmPackages.ts Allows test:playwright as a split test script name for policy checks.
build-tools/packages/build-cli/src/commands/release/report-unreleased.ts Removes special-casing for the deleted internal typings package.
.syncpackrc.yml Removes version-group special handling for puppeteer/jest env type packages.
_buildProject.config.cjs Removes the internal typings package from the client release group include list.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread examples/playwright.config.base.ts
Comment thread examples/apps/claims-example/tsconfig.json
…laywright

# Conflicts:
#	examples/external-data/jest-puppeteer.config.cjs
#	examples/external-data/jest.config.cjs
#	examples/external-data/package.json
#	examples/external-data/src/test/customerService.test.ts
#	examples/external-data/src/test/externalDataService.test.ts
#	examples/external-data/src/test/taskData.test.ts
#	examples/external-data/test/taskList.test.ts
#	examples/external-data/tsconfig.json
#	pnpm-lock.yaml
@github-actions github-actions Bot added the area: server Server related issues (routerlicious) label Aug 15, 2026
@alexvy86

Copy link
Copy Markdown
Contributor

I found two issues in the client-utils portion of this migration:

  1. packages/common/client-utils/src/test/playwright/gitHash.test.ts: the replacement no longer exercises the production browser hashing implementation. The previous Jest test used rewire to invoke digestBuffer and encodeDigest from hashFileBrowser.js; the new test imports the Node entry point and independently reimplements those browser operations in browserHash/encodeDigest. A regression in the production browser implementation can therefore pass while the copied implementation remains correct. Could we run the actual browser entry point in the page, for example through a small browser bundle that imports indexBrowser.js?

  2. packages/common/client-utils/package.json: fluidBuild.tasks now defines build:test:mocha:cjs, build:test:mocha:esm, and build:test:types twice. The values currently match, so behavior is unchanged, but JSON parsing silently keeps only the later copies and future edits to the earlier definitions would be ignored. Please keep one definition for each key and add only build:test:playwright in the new block.

@alexvy86

Copy link
Copy Markdown
Contributor

One behavior change seems worth calling out in the PR description: the old Jest-Puppeteer configs used usedPortAction: "error", whereas the Playwright configs use reuseExistingServer: !process.env.CI. CI still fails on a port conflict, but local test runs will now reuse a process already listening at the assigned URL instead of rejecting it. That is probably a useful local-development improvement, but it could also connect a test to a stale or unrelated server, so documenting the intentional tradeoff would help reviewers and future maintainers.

@alexvy86

Copy link
Copy Markdown
Contributor

I did a joint pass over the whole PR with an agent (didn't look at every single file myself) and I think the change is sound. I can approve once the merge conflict is addressed and the 2 points in #27964 (comment) have been considered.

Bundle the production browser entry point for Playwright hash tests, preserve binary bytes in browser git hashing, and remove duplicate FluidBuild task definitions.
@Josmithr

Copy link
Copy Markdown
Contributor Author

One behavior change seems worth calling out in the PR description: the old Jest-Puppeteer configs used usedPortAction: "error", whereas the Playwright configs use reuseExistingServer: !process.env.CI. CI still fails on a port conflict, but local test runs will now reuse a process already listening at the assigned URL instead of rejecting it. That is probably a useful local-development improvement, but it could also connect a test to a stale or unrelated server, so documenting the intentional tradeoff would help reviewers and future maintainers.

I went ahead and reverted this behavioral change. We can always reconsider this later, but that minimizes the scope of change here.

@github-actions

Copy link
Copy Markdown
Contributor

🔗 Found some broken links! 💔

Run a link check locally to find them. See Checking for Broken Links for more information.

linkcheck output

1: starting server using command "npm run serve -- --no-open"
and when url "[ 'http://127.0.0.1:3000' ]" is responding with HTTP status code 200
running tests using command "npm run check-links"


> fluid-framework-website@0.0.0 serve
> docusaurus serve --no-open

[SUCCESS] Serving "build" directory at: http://localhost:3000/
[ELIFECYCLE] Command failed with exit code 1.

@github-actions

Copy link
Copy Markdown
Contributor

Bundle size comparison

Base commit: cc08e183b8d5c6c722d6983e90b8f0373067e5d0
Head commit: 32388e174cbc89c5d8fd13d233bd138ecceb81b8

Notable changes

No bundles changed by ≥ 500 bytes parsed.

Per-bundle deltas

@fluid-example/bundle-size-tests

  • fluidFrameworkAllAlpha.js: parsed 784509 → 784551 (+42), gzip 215049 → 215082 (+33)
  • azureClient.js: parsed 624847 → 624963 (+116), gzip 166640 → 166709 (+69)
  • odspClient.js: parsed 597135 → 597191 (+56), gzip 159785 → 159827 (+42)
  • aqueduct.js: parsed 531223 → 531258 (+35), gzip 142114 → 142143 (+29)
  • fluidFramework.js: parsed 403809 → 403830 (+21), gzip 114489 → 114507 (+18)
  • sharedTree.js: parsed 393213 → 393227 (+14), gzip 111931 → 111940 (+9)
  • containerRuntime.js: parsed 309144 → 309158 (+14), gzip 84569 → 84576 (+7)
  • sharedString.js: parsed 176510 → 176517 (+7), gzip 49798 → 49805 (+7)
  • experimentalSharedTree.js: parsed 160665 → 160665 (0), gzip 46265 → 46265 (0)
  • matrix.js: parsed 160341 → 160348 (+7), gzip 45798 → 45805 (+7)
  • loader.js: parsed 145704 → 145718 (+14), gzip 39286 → 39301 (+15)
  • odspDriver.js: parsed 103906 → 103927 (+21), gzip 32404 → 32411 (+7)
  • directory.js: parsed 67110 → 67117 (+7), gzip 18859 → 18866 (+7)
  • 578.js: parsed 58686 → 58686 (0), gzip 17657 → 17657 (0)
  • map.js: parsed 47205 → 47212 (+7), gzip 14455 → 14462 (+7)
  • odspPrefetchSnapshot.js: parsed 45635 → 45649 (+14), gzip 15242 → 15250 (+8)
  • 252.js: parsed 44362 → 44362 (0), gzip 13735 → 13735 (0)
  • summarizerDelayLoadedModule.js: parsed 30717 → 30717 (0), gzip 7716 → 7716 (0)
  • socketModule.js: parsed 26469 → 26476 (+7), gzip 7896 → 7904 (+8)
  • createNewModule.js: parsed 12454 → 12454 (0), gzip 4797 → 4797 (0)
  • summaryModule.js: parsed 3789 → 3789 (0), gzip 1857 → 1857 (0)
  • connectionState.js: parsed 909 → 909 (0), gzip 500 → 500 (0)
  • sharedTreeAttributes.js: parsed 847 → 854 (+7), gzip 499 → 508 (+9)
  • debugAssert.js: parsed 429 → 429 (0), gzip 299 → 299 (0)
  • FluidFramework-HashFallback.js: parsed 419 → 419 (0), gzip 313 → 313 (0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: build Build related issues area: examples Changes that focus on our examples area: repo Repo related work area: server Server related issues (routerlicious) area: tests Tests to add, test infrastructure improvements, etc area: tools area: website base: main PRs targeted against main branch changeset-present dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants