Claude-skill-registry e2e

Playwright E2E testing patterns. Use when working on files in tests/e2e/.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/e2e-bentefay-moneyflow" ~/.claude/skills/majiayu000-claude-skill-registry-e2e && rm -rf "$T"
manifest: skills/data/e2e-bentefay-moneyflow/SKILL.md
source content

E2E Test Guidelines

Philosophy

  • Journey-style tests covering critical flows end-to-end
  • Strongly prefer adding
    test.step()
    to existing tests
    over creating new tests - keeps suite fast and avoids duplicating slow setup flows
  • Fix flaky tests immediately, regardless of when introduced

Commands

pnpm playwright test --reporter=line --max-failures=1 2>&1
pnpm playwright test --workers=4 --repeat-each=5 --reporter=line 2>&1  # flaky detection

NEVER use

--debug
or
--ui
- opens GUI, blocks forever. This is a common mistake.

Selectors (priority order)

  1. getByRole()
  2. getByTestId()
  3. getByLabel()
  4. getByText(/regex/i)

Critical Rules

  • Assert behaviour, not text - text changes with copy edits/i18n
  • Independent tests - use
    beforeEach
    , don't depend on prior test state
  • No arbitrary waits - use
    toBeEnabled()
    , not
    waitForTimeout()

Helpers

Import from

tests/e2e/helpers/
:

  • createNewIdentity(page)
    - full new user flow
  • goToTransactions(page)
    ,
    goToTags(page)
    , etc.

Create helpers for multi-step reused flows. Don't wrap single Playwright calls.

Pattern

test.describe("Feature", () => {
  test.beforeEach(async ({ page }) => {
    await createNewIdentity(page);
    await goToFeature(page);
  });

  test("should do thing", async ({ page }) => {
    // Arrange → Act → Assert
  });
});