# Write E2e Cases

> Use when adding or updating Rsdoctor end-to-end tests in `e2e/cases/`, including new feature coverage, bug reproduction, and regression prevention.

- Skill: `web-infra-dev/write-e2e-cases` (Agent Skill)
- Install (CLI): `npx skillmds@latest add web-infra-dev/write-e2e-cases`
- Raw SKILL.md: https://api.skillmd.com/api/skills/web-infra-dev/write-e2e-cases/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: web-infra-dev (https://skillmd.com/u/web-infra-dev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/web-infra-dev/write-e2e-cases

---


# Write E2E cases

Rsdoctor E2E tests use **Playwright** and live under `e2e/cases/`. Each bundler has its own directory:

- `e2e/cases/doctor-rspack/` — tests using Rspack compilation
- `e2e/cases/doctor-rsbuild/` — tests using Rsbuild
- `e2e/cases/doctor-rspeedy/` — tests using Rspeedy

## Steps

1. Review uncommitted git changes to define test scope and target behavior.

2. Read `e2e/README.md` and follow its conventions.

3. Use helpers from `@scripts/test-helper` (for example `compileByRspack`) to compile fixtures. Do **not** call bundler APIs directly.

4. Add Playwright test files under the appropriate `e2e/cases/doctor-*` directory, following existing patterns.

5. Test fixtures (source files, loaders, configs) go in `fixtures/` subdirectories inside each case directory.

6. Keep assertions focused and readable; avoid redundant setup and checks.

7. Run `pnpm e2e` from the repository root to validate.

## Case structure

- Each test file creates an Rsdoctor plugin instance (e.g., `createRsdoctorPlugin` from a local `test-utils.ts`), compiles a fixture via `compileByRspack`, and asserts on the SDK store data.
- Fixtures are plain JS/TS files and loaders in `fixtures/` — not full application directories.
- Use `@rsdoctor/core/plugins` for `getSDK` / `setSDK` when inspecting analysis results.

## Constraints

- If tests can pass only after source-code changes, do not change source code directly. Explain the required source change and ask the user before proceeding.

