-
-
Notifications
You must be signed in to change notification settings - Fork 16
feat: browser-mode #757
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: browser-mode #757
Conversation
✅ Deploy Preview for rstest-dev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
ebeed81 to
eb7ad24
Compare
There was a problem hiding this comment.
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 introduces comprehensive browser-mode testing capability to Rstest, allowing tests to run in actual browser environments (Chromium, Firefox, or WebKit) via Playwright. The implementation includes a React-based test UI, WebSocket-based RPC communication between host and browser, and support for browser-specific features like snapshots.
Key Changes:
- New
@rstest/browserpackage for browser test orchestration using Playwright - New
@rstest/browser-uipackage with React UI for visualizing browser test execution - Core package enhancements to support browser mode configuration and runtime
- Browser runtime that shares test execution logic with Node.js mode
- WebSocket RPC for host-browser communication
Reviewed changes
Copilot reviewed 161 out of 167 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
scripts/dictionary.txt |
Added spelling dictionary entries for new terms (fastpaths, noglobstar) |
rstest.config.ts |
Excluded browser-projects from test discovery |
packages/vscode/tests/fixtures/fixtures.code-workspace |
Formatting changes (whitespace normalization) |
packages/vscode/AGENTS.md |
Restructured documentation with clearer architecture and command sections |
packages/coverage-istanbul/package.json |
Added typecheck script |
packages/coverage-istanbul/AGENTS.md |
New documentation for coverage package |
packages/core/tests/tsconfig.json |
Added rstestEnv.d.ts to include list |
packages/core/tests/core/rstest.test.ts |
Mocked std-env for consistent snapshots |
packages/core/tests/core/rsbuild.test.ts |
Updated snapshots with browser config defaults |
packages/core/tests/__snapshots__/*.snap |
Updated snapshots to include browser configuration |
packages/core/src/types/config.ts |
Added BrowserModeConfig and NormalizedBrowserModeConfig types |
packages/core/src/runtime/worker/env/jsdom.ts |
Minor formatting change |
packages/core/src/runtime/worker/console.ts |
Updated import path (utils → utils/helper) |
packages/core/src/runtime/util.ts |
Added browser-compatible formatTemplate, updated checkPkgInstalled |
packages/core/src/runtime/runner/*.ts |
Updated import paths for utils refactoring |
packages/core/src/runtime/api/*.ts |
Import path updates and React Fast Refresh compatibility |
packages/core/src/env.d.ts |
Added DOM types and module declarations for browser package |
packages/core/src/core/runTests.ts |
Separated browser and node mode test execution |
packages/core/src/core/rsbuild.ts |
Filtered browser projects from node mode builds |
packages/core/src/core/listTests.ts |
Added browser test collection via listBrowserTests |
packages/core/src/core/browserLoader.ts |
Browser package loader with version validation |
packages/core/src/config.ts |
Browser config merging and defaults |
packages/core/src/cli/*.ts |
Added --browser CLI flag |
packages/core/src/browserRuntime.ts |
Browser-safe runtime exports |
packages/core/src/browser.ts |
Internal exports for browser package |
packages/core/rslib.config.ts |
Added browser and browser-runtime entry points |
packages/core/package.json |
New exports, dependencies (playwright-core, ws, sirv, etc.) |
packages/core/LICENSE.md |
Added url-extras license |
packages/core/AGENTS.md |
New documentation for core package |
packages/browser/** |
Complete new package for browser mode orchestration |
packages/browser-ui/** |
Complete new package for browser test UI |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let isNewPage = false; | ||
|
|
||
| if (isWatchMode && runtime.containerPage && runtime.containerContext) { | ||
| containerContext = runtime.containerContext; |
Copilot
AI
Jan 5, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The value assigned to containerContext here is unused.
|
🎉 |
rerun test on watch use virtual module isolated pages lazy compilation iframe rebase type check react @rstest/browser-ui tailwind allow chrome better UI refine antd rerun remove canUseRpc nested tree add e2e fix globals fix e2e rewrite watch ui rename ui update all AGENTS.md basic react e2e support forward console.log to stdio clean e2e ports refine ui RSTEST_CONTAINER_DEV_SERVER=http://localhost:7392/ remove exposeBinding merge more configs support projects rebase projects should run separately, diversion browser/node mode in runTests fix list command with browser mode ui: polish snapshot inline snapshot rebase chore @rstest/browser support provider and browser lint polish readme win32 fix: handle Windows EBUSY error in watch.test.ts cleanup fix: only tolerate cleanup errors on Windows fix: handle Windows EBUSY error in prepareFixtures cleanup fix: increase CI test timeout to 30s for slower environments fix: use dynamic port for watch fixture to avoid conflicts Revert "fix: use dynamic port for watch fixture to avoid conflicts" This reverts commit 517bf8f. clean fix fast refresh vs proxy race mock headless clean cr
Summary
Add browser mode support for Rstest, allowing tests to run in real browser environments (Chromium/WebKit) via Playwright.
TODO:
new configurations:
New:
browserconfigbrowser.enabled- Enable browser mode (default:false)browser.provider- Browser driver provider:'playwright'(default:'playwright')browser.browser- Browser to use:'chromium'|'firefox'|'webkit'(default:'chromium')browser.headless- Run in headless mode (default: inferred from CI,truein CI,falseotherwise)browser.port- Port for browser mode dev server (default: random available port)New Packages
Architecture
Communication Flow
Key Features
console.login tests shows in terminalprojectsconfigChanges
browserconfig option (browser.enabled,browser.browser,browser.headless)projectsconfig for multi-project workspaces@rstest/browserand@rstest/browser-uipackagese2e/browser-mode/)examples/browser,examples/browser-projects)UI to show the interaction:
iShot_2025-12-11_11.15.14.mp4
the updated UI.
iShot_2026-01-05_11.08.16.mp4
Related Links
Checklist