# safe-action-testing

Подсказывает агенту, как писать тесты для экшенов и хуков next-safe-action на Vitest: валидация, middleware, серверные ошибки.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 1100 установок · ★ 1
- Автор: next-safe-action
- Лицензия: не указана · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/next-safe-action/skills/tree/HEAD/skills/safe-action-testing/SKILL.md
- Обновлён: 2026-09-03
- HTML: https://affpapa.org/nevibecode/skills/safe-action-testing

## Что делает

Скилл включается, когда вы просите написать тесты для `next-safe-action`. Агент получает готовые шаблоны на Vitest: прямой вызов серверного экшена, проверка `result.data`, `validationErrors` и `serverError`, тесты экшенов с bind-аргументами.

Отдельные разделы — про middleware и хуки. Для middleware показано, как собрать клиент с нужной цепочкой и замокать сессию через `vi.mock`, а для хуков — `renderHook` из React Testing Library с проверкой состояний `isIdle`, `isExecuting`, `hasSucceeded` и вызовом `reset`. Есть утилиты `flattenValidationErrors` и `formatValidationErrors` и мок `next/navigation` для редиректов.

Ошибки валидации bind-аргументов выбрасываются как `ActionBindArgsValidationError`, поэтому в тестах их ловят через `rejects.toThrow()`, а не через `result.validationErrors`. Форматы digest у `NEXT_REDIRECT` — внутренняя деталь Next.js, и в самом скилле отмечено, что между версиями они меняются.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add next-safe-action/skills --skill safe-action-testing -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/safe-action-testing/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/safe-action-testing/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add next-safe-action/skills --skill safe-action-testing -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/safe-action-testing/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add next-safe-action/skills --skill safe-action-testing -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/safe-action-testing/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install next-safe-action/skills safe-action-testing
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/safe-action-testing/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add next-safe-action/skills --skill safe-action-testing -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/next-safe-action/skills --path skills/safe-action-testing
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/safe-action-testing/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add next-safe-action/skills --skill safe-action-testing -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/next-safe-action/skills/tree/HEAD/skills/safe-action-testing/SKILL.md

## Когда брать
- написать тесты для серверного экшена next-safe-action
- проверить, что middleware прокидывает userId в контекст
- замокать сессию и убедиться, что без неё возвращается serverError
- протестировать хук useAction через renderHook
- поймать ошибку валидации bind-аргументов в тесте

## Примеры запросов агенту
- Напиши тесты на Vitest для экшена `createUser` из `@/app/actions`, проверь успех и ошибки валидации
- Протестируй middleware с проверкой сессии: собери клиент и замокай `getSession`
- Напиши тест хука `useAction` через `renderHook`, проверь состояния и `reset`

## Похожие
- [improve-codebase-architecture](https://affpapa.org/nevibecode/skills/improve-codebase-architecture.md) — скилл · 1163035 установок
- [design-taste-frontend](https://affpapa.org/nevibecode/skills/design-taste-frontend.md) — скилл · 678700 установок
- [tdd](https://affpapa.org/nevibecode/skills/tdd.md) — скилл · 1141062 установки
- [skill-creator](https://affpapa.org/nevibecode/skills/skill-creator.md) — скилл · 414180 установок
- [agent-browser](https://affpapa.org/nevibecode/skills/vercel-labs-agent-browser.md) — скилл · 1200000 установок
- [prototype](https://affpapa.org/nevibecode/skills/prototype.md) — скилл · 986201 установка

Из того же набора: [next-safe-action/skills](https://affpapa.org/nevibecode/by/next-safe-action/skills.md) — 3 карточки

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
