К основному содержанию
скилл CX Codex

frontend-testing-best-practices — скилл для Claude Code

Набор из 6 правил тестирования фронтенда: заставляет писать сквозные E2E-тесты в Playwright вместо изолированных юнит-тестов компонентов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add sergiodxa/agent-skills --skill frontend-testing-best-practices -a claude-code
Открыть на GitHub

Что делает frontend-testing-best-practices

Скилл внедряет в агент жёсткую стратегию тестирования пользовательского интерфейса. Он требует проверять поведение всей системы через E2E-тесты и прямо запрещает тестировать компоненты React по отдельности. Модульные тесты на Vitest разрешены только для чистых функций вроде утилит форматирования, и они должны лежать рядом с исходным кодом.

В правилах зафиксированы требования к структуре и селекторам. Сквозные сценарии размещаются строго в папке e2e/tests/. Для поиска элементов агент обязан использовать селекторы доступности: роли (getByRole), подписи (getByLabel) и текст, избегая хрупких CSS-классов.

Скилл запрещает городить сложные моки: если для проверки требуется от трёх моков и более, агент перепишет сценарий в виде полноценного E2E-теста. Привычные тесты рендеринга карточек через React Testing Library этот набор правил бракует сразу.

Какие задачи решает

  • настроить сквозное тестирование интерфейса в Playwright
  • заменить цепочки моков на реальные сквозные тесты
  • подобрать селекторы доступности вместо CSS-классов для кликов и проверок
  • разделить тесты на чистые функции для Vitest и сквозные сценарии

Примеры запросов агенту

  • Напиши E2E-тест оформления заказа в каталоге по правилам frontend-testing-best-practices
  • Проверь этот компонент и скажи, нужен ли для него отдельный юнит-тест
  • Зарефактори тесты корзины: убери CSS-селекторы и оставь только доступные роли

Как установить frontend-testing-best-practices

1Через Skills CLI (Vercel)

npx skills add sergiodxa/agent-skills --skill frontend-testing-best-practices -a claude-code

2Вручную: положить файлы

~/.claude/skills/frontend-testing-best-practices/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/frontend-testing-best-practices/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора5

Похожие

react-testing affaan-m Скилл для написания тестов React-компонентов, хуков и страниц: React Testing Library, Vitest или Jest, MSW для моков сети и проверки доступности через axe. CX Codex +1 4 800установок web-testing mrgoonie Скилл для веб-тестирования: юнит, интеграция, E2E, нагрузка, безопасность, визуальные регрессии и доступность. Пригодится, когда нужно навести порядок в тестах проекта. CX Codex +1 442установок vitest-midscene-e2e web-infra-dev Скилл объединяет Vitest и Midscene для создания E2E-тестов на естественном языке под Web, Android и iOS. Помогает быстро развернуть бойлерплейт или наладить автотесты без селекторов. CX Codex +1 2 100установок vue-testing-best-practices github.com/vuejs-ai Скилл с правилами и паттернами тестирования приложений на Vue 3. Помогает настроить Vitest и писать тесты компонентов без ошибок внедрения зависимостей. CX Codex +1 13 700установок e2e-tests-studio mastra-ai Скилл автоматически генерирует Playwright E2E тесты при изменении компонентов playground. Тестирует не состояние интерфейса, а реальное поведение: сохранение данных, потоки данных, эффекты действий. CX Codex +1 2 500установок e2e-playwright-testing Agent Skills Contributors Скилл для написания и разбора E2E-тестов на Playwright: локаторы, авторизация, формы, ассерты и конфиг для CI. CX Codex +1 796установок

Рядом в теме «Фронтенд и UI»

Всё по теме «Фронтенд и UI» →

Вопросы о frontend-testing-best-practices

Как установить frontend-testing-best-practices в Claude Code?

Выполните команду npx skills add sergiodxa/agent-skills --skill frontend-testing-best-practices -a claude-code. Файл скилла сохранится по пути ~/.claude/skills/frontend-testing-best-practices/SKILL.md.

Что делает frontend-testing-best-practices?

Скилл задаёт агенту правила написания тестов: предпочитать E2E-сценарии в Playwright, не тестировать React-компоненты изолированно и писать юнит-тесты только для чистых функций.

Что скилл предписывает делать при большом количестве моков?

Правило minimize-mocking требует отказаться от юнит-теста и написать полноценный E2E-тест, если для изоляции требуется три и более мока.

Исходный текст

SKILL.md · MIT
---
name: frontend-testing-best-practices
description: Testing best practices for the frontend. Emphasizes E2E tests over unit tests, minimal mocking, and testing behavior over implementation details. Use when writing tests or reviewing test code.
---

# Testing Best Practices

Guidelines for writing effective, maintainable tests that provide real confidence. Contains 6 rules focused on preferring E2E tests, minimizing mocking, and testing behavior over implementation.

## Core Philosophy

1. **Prefer E2E tests over unit tests** - Test the whole system, not isolated pieces
2. **Minimize mocking** - If you need complex mocks, write an E2E test instead
3. **Test behavior, not implementation** - Test what users see and do
4. **Avoid testing React components directly** - Test them through E2E

## When to Apply

Reference these guidelines when:

- Deciding what type of test to write
- Writing new E2E or unit tests
- Reviewing test code
- Refactoring tests

## Rules Summary

### Testing Strategy (CRITICAL)

#### prefer-e2e-tests - @rules/prefer-e2e-tests.md

Default to E2E tests. Only write unit tests for pure functions.

```typescript
// E2E test (PREFERRED) - tests real user flow
test("user can place an order", async ({ page }) => {
  await createTestingAccount(page, { account_status: "active" });
  await page.goto("/catalog");
  await page.getByRole("heading", { name: "Example Item" }).click();
  await page.getByRole("link", { name: "Buy" }).click();
  // ... complete flow
  await expect(page.getByAltText("Thank you")).toBeVisible();
});

// Unit test - ONLY for pure functions
test("formatCurrency formats with two decimals", () => {
  expect(formatCurrency(1234.5)).toBe("$1,234.50");
});
```

#### avoid-component-tests - @rules/avoid-component-tests.md

Don't unit test React components. Test them through E2E or not at all.

```typescript
// BAD: Component unit test
describe("OrderCard", () => {
  test("renders amount", () => {
    render(<OrderCard amount={100} />);
    expect(screen.getByText("$100")).toBeInTheDocument();
  });
});

// GOOD: E2E test covers the component naturally
test("order history shows orders", async ({ page }) => {
  await page.goto("/orders");
  await expect(page.getByText("$100")).toBeVisible();
});
```

#### minimize-mocking - @rules/minimize-mocking.md

Keep mocks simple. If you need 3+ mocks, write an E2E test instead.

```typescript
// BAD: Too many mocks = write E2E test
vi.mock("~/lib/auth");
vi.mock("~/lib/transactions");
vi.mock("~/hooks/useAccount");

// GOOD: Simple MSW mock for loader test
mockServer.use(
  http.get("/api/user", () => HttpResponse.json({ name: "John" })),
);
```

### E2E Tests (HIGH)

#### e2e-test-structure - @rules/e2e-test-structure.md

E2E tests go in `e2e/tests/`, not `frontend/`.

```typescript
// e2e/tests/order.spec.ts
import { test, expect } from "@playwright/test";
import { addAccountBalance, createTestingAccount } from "./utils";

test.describe("Orders", () => {
  test.beforeEach(async ({ page, context }) => {
    await createTestingAccount(page, { account_status: "active" });
    let cookies = await context.cookies();
    let account_id = cookies.find((c) => c.name === "account_id").value;
    await addAccountBalance({ account_id, amount: 10000, replaceBalance: true });
  });

  test("place order with default values", async ({ page }) => {
    await page.goto("/catalog");
    // ... user flow
  });
});
```

#### e2e-selectors - @rules/e2e-selectors.md

Use accessible selectors: role > label > text > testid.

```typescript
// GOOD: Role-based (preferred)
await page.getByRole("button", { name: "Submit" }).click();
await page.getByRole("heading", { name: "Dashboard" });

// GOOD: Label-based
await page.getByLabel("Email").fill("[email protected]");

// OK: Test ID when no accessible selector exists
await expect(page.getByTestId("balance")).toHaveText("$1,234");

// BAD: CSS selectors
await page.locator(".btn-primary").click();
```

### Unit Tests (MEDIUM)

#### unit-test-structure - @rules/unit-test-structure.md

Unit tests for pure functions only. Co-locate with source files.

```typescript
// app/utils/format.test.ts
import { describe, test, expect } from "vitest";
import { formatCurrency } from "./format";

describe("formatCurrency", () => {
  test("formats positive amounts", () => {
    expect(formatCurrency(1234.5)).toBe("$1,234.50");
  });

  test("handles zero", () => {
    expect(formatCurrency(0)).toBe("$0.00");
  });
});
```

## Key Files

- `e2e/tests/` - E2E tests (Playwright)
- `e2e/tests/utils.ts` - E2E test utilities
- `vitest.config.ts` - Unit test configuration
- `vitest.setup.ts` - Global test setup with MSW
- `app/utils/test-utils.ts` - Unit test utilities

© sergiodxa · MIT · sergiodxa/agent-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой