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

testing-anti-patterns — скилл для Claude Code: тесты и установка

Скилл помогает находить ошибки в тестах: проверки поведения моков, тестовые методы в продакшене и неполные заглушки.

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

Что делает testing-anti-patterns

testing-anti-patterns задаёт правила для написания и ревью тестов. Он помогает проверять реальное поведение кода, не подменять тест проверкой вызовов мока, не добавлять в рабочие классы методы только для тестов и сначала разбираться с зависимостями.

В материалах разобраны пять групп ошибок: проверка поведения моков, тестовые методы в продакшене, мокирование без понимания побочных эффектов, неполные моки и тесты, добавленные после реализации. Есть примеры для TypeScript с Jest и Python с pytest, а также чек-лист для проверки перед коммитом.

Если настройка мока занимает больше половины теста, это повод рассмотреть интеграционный тест с реальными компонентами. Скилл отключён для прямого вызова пользователем и не запускается автоматически.

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

  • проверить, тестирует ли сценарий реальное поведение
  • найти методы в продакшене, нужные только тестам
  • выявить неполные моки с отсутствующими полями
  • разобраться, какие зависимости и побочные эффекты нужно мокировать
  • перенести тестовые проверки в рабочий процесс TDD

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

  • Проверь этот тест: не проверяет ли он поведение мока вместо реального результата.
  • Найди в изменениях тестовые методы в продакшен-классах и предложи вынести их в тестовые утилиты.
  • Проверь моки в src/service.test.ts: сравни их структуру с API зависимостей и укажи недостающие поля.

Как установить testing-anti-patterns

1Через Skills CLI (Vercel)

npx skills add bobmatnyc/claude-mpm-skills --skill testing-anti-patterns -a claude-code

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

~/.claude/skills/testing-anti-patterns/SKILL.md

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

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

Вопросы о testing-anti-patterns

Как установить testing-anti-patterns в Claude Code?

Выполните npx skills add bobmatnyc/claude-mpm-skills --skill testing-anti-patterns -a claude-code, затем повторите эту команду. Скилл появится по пути ~/.claude/skills/testing-anti-patterns/SKILL.md.

Что делает testing-anti-patterns?

Скилл помогает находить тесты, которые проверяют поведение моков, используют тестовые методы в продакшене или создают неполные заглушки. Он также предлагает сначала понять зависимости и писать тест до реализации.

С какими тестовыми стеками работает testing-anti-patterns?

В скилле есть примеры для TypeScript с Jest и Python с pytest. Принципы сформулированы без привязки к языку.

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

SKILL.md · MIT
---
name: testing-anti-patterns
description: Never test mock behavior. Never add test-only methods to production classes. Understand dependencies before mocking. Language-agnostic principles with TypeScript/Jest and Python/pytest examples.
user-invocable: false
disable-model-invocation: true
when_to_use: when writing or changing tests, adding mocks, or tempted to add test-only methods to production code
version: 3.0.0
tags:
  - testing
  - typescript
  - javascript
  - python
  - pytest
  - jest
  - mocking
  - tdd
  - anti-patterns
progressive_disclosure:
  entry_point:
    summary: "Avoid testing mocks, test-only production methods, and incomplete mocking. Test real behavior, not mock behavior. Covers TypeScript/Jest and Python/pytest."
    when_to_use: "When writing tests, adding mocks, reviewing test failures, or tempted to add test-only methods to production code."
    quick_start: "1. Ask: 'Am I testing real behavior?' 2. Check: 'Is this method only for tests?' 3. Verify: 'Do I understand what I'm mocking?' 4. Confirm: 'Is my mock complete?' 5. Apply: TDD prevents these patterns"
  references:
    - core-anti-patterns.md
    - completeness-anti-patterns.md
    - detection-guide.md
    - tdd-connection.md
    - python-examples.md
related_skills:
  - toolchains-typescript-testing-jest
  - toolchains-typescript-testing-vitest
  - toolchains-python-testing-pytest
  - universal-debugging-systematic-debugging
  - universal-debugging-verification-before-completion
---

# Testing Anti-Patterns

## Overview

Tests must verify real behavior, not mock behavior. Mocks are a means to isolate, not the thing being tested.

**Core principle:** Test what the code does, not what the mocks do.

**Following strict TDD prevents these anti-patterns.** See the Test-Driven Development skill (available in the skill library) for the complete TDD workflow.

## When to Use This Skill

Activate this skill when:
- **Writing or changing tests** - Verify tests cover real behavior
- **Adding mocks** - Ensure mocking is necessary and correct
- **Reviewing test failures** - Check if mock behavior is the issue
- **Tempted to add test-only methods** - STOP and reconsider
- **Tests feel overly complex** - Sign of over-mocking

## The Iron Laws

```
1. NEVER test mock behavior
2. NEVER add test-only methods to production classes
3. NEVER mock without understanding dependencies
4. NEVER create incomplete mocks
5. NEVER treat tests as afterthought
```

## Core Anti-Pattern Categories

### 1. Testing Mock Behavior
Asserting on mock elements instead of real behavior. **Fix:** Test real component or don't mock it.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-1-testing-mock-behavior)

### 2. Test-Only Methods in Production
Methods in production classes only used by tests. **Fix:** Move to test utilities.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-2-test-only-methods-in-production)

### 3. Mocking Without Understanding
Mocking without understanding dependencies/side effects. **Fix:** Understand first, mock minimally.
**→** [core-anti-patterns.md](references/core-anti-patterns.md#anti-pattern-3-mocking-without-understanding)

### 4. Incomplete Mocks
Partial mocks missing fields downstream code needs. **Fix:** Mirror complete API structure.
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-4-incomplete-mocks)

### 5. Tests as Afterthought
Implementation "complete" without tests. **Fix:** TDD - write test first.
**→** [completeness-anti-patterns.md](references/completeness-anti-patterns.md#anti-pattern-5-tests-as-afterthought)

## Quick Detection Checklist

Run this checklist before committing any test:

**Language-agnostic checks:**
```
□ Am I asserting on mock behavior instead of real behavior?
  → TypeScript: testId='*-mock', expect(mock).toHaveBeenCalled()
  → Python: mock.assert_called(), mock.call_count
  → If yes: STOP - Test real behavior or unmock

□ Does this method only exist for tests?
  → TypeScript: destroy(), reset(), clear() only in *.test.ts
  → Python: _set_mock_*, _for_testing only in test_*.py
  → If yes: STOP - Move to test utilities

□ Do I fully understand what I'm mocking?
  → If no: STOP - Run with real impl first, then mock minimally

□ Is my mock missing fields the real API has?
  → TypeScript: Partial<T>, incomplete objects
  → Python: Mock() with few attributes, missing nested fields
  → If yes: STOP - Mirror complete API structure

□ Did I write implementation before test?
  → If yes: STOP - Delete impl, write test first (TDD)

□ Is mock setup >50% of test code?
  → If yes: Consider integration test with real components
```

**See:** [detection-guide.md](references/detection-guide.md) for comprehensive red flags and warning signs.

## The Bottom Line

**Mocks are tools to isolate, not things to test.**

Testing mock behavior indicates a problem. Fix: Test real behavior or question why mocking is necessary.

**TDD prevents these patterns.** Write test first → Watch fail → Minimal implementation → Pass → Refactor.

## Navigation

### Detailed Anti-Pattern Analysis
- **[Core Anti-Patterns](references/core-anti-patterns.md)** - Patterns 1-3: Mock behavior, test-only methods, uninformed mocking
- **[Completeness Anti-Patterns](references/completeness-anti-patterns.md)** - Patterns 4-5: Incomplete mocks, tests as afterthought

### Detection & Prevention
- **[Detection Guide](references/detection-guide.md)** - Red flags, warning signs, gate functions
- **[TDD Connection](references/tdd-connection.md)** - How test-driven development prevents these patterns

### Language-Specific Examples
- **[Python Examples](references/python-examples.md)** - Complete Python/pytest guide covering all 5 anti-patterns with unittest.mock and pytest-mock patterns, fixture best practices, and pytest-specific detection. Load when working with Python tests.

### Related Skills

When using this skill, consider these complementary skills (if deployed in your skill bundle):

- **test-driven-development**: Complete TDD workflow and red-green-refactor cycle
  - *Use case*: Implementing TDD discipline to prevent anti-patterns
  - *Integration*: TDD workflow prevents most anti-patterns by design
  - *Status*: Recommended - basic anti-patterns covered in this skill

- **verification-before-completion**: Definition of "done" and verification protocols
  - *Use case*: Ensuring tests are part of completion criteria
  - *Integration*: Tests must pass before work is considered complete
  - *Status*: Recommended - testing mindset reinforcement

*Note: All skills are independently deployable. This skill is fully functional without them.*

## Key Reminders

1. **Mocks isolate, don't prove** - Test real code, not mocks
2. **Production ignores tests** - No test-only methods
3. **Understand before mocking** - Know dependencies and side effects
4. **Complete mocks only** - Mirror full API structure
5. **Tests ARE implementation** - Not optional afterthought

## Red Flags - STOP

**STOP immediately when:**
- **Testing mock behavior**
  - TypeScript: Asserting on `*-mock` test IDs, `expect(mock).toHaveBeenCalled()`
  - Python: `mock.assert_called()`, `mock.call_count` without real behavior checks
- **Adding test-only methods**
  - TypeScript: `destroy()`, `reset()` only in `*.test.ts`
  - Python: `_set_mock_*`, `_for_testing` with "For testing only" docstrings
- **Mocking without understanding**
  - Adding `@patch` or `vi.mock()` "just to be safe"
  - Creating mocks from memory instead of API docs
- **Incomplete mocks**
  - TypeScript: `Partial<T>`, missing nested objects
  - Python: `Mock()` for data objects, missing required fields
- **Tests as afterthought**
  - Saying "tests can wait" or "ready for testing"
  - Implementation commits before test commits

**When mocks become too complex:** Consider integration tests with real components. Often simpler and more valuable.

## Integration with Other Skills

**Prerequisite:** Test-Driven Development skill - TDD prevents anti-patterns (recommended for complete workflow)
**Complementary:** Verification-Before-Completion skill - Tests = done (ensures proper testing discipline)
**Domain-specific:** webapp-testing, backend-testing for framework patterns (see skill library if available)

© bobmatnyc · MIT · bobmatnyc/claude-mpm-skills

Похожие скиллы

Всё по теме «Тесты и QA» →
javascript-testing-patterns Seth Hobson Скилл подсказывает, как писать unit-, интеграционные и end-to-end-тесты для JavaScript и TypeScript. Пригодится при настройке тестовой инфраструктуры и работе по TDD. CX Codex 20 472установок python-testing-patterns Seth Hobson Скилл помогает писать тесты Python с pytest, фикстурами и моками. Подходит для настройки тестового набора и отладки падающих проверок. CX Codex 36 943установок testing-patterns davila7 Скилл для Claude с готовыми паттернами тестирования на Jest: фабрики данных, моки и цикл red-green-refactor. 365установок unit-testing kindlmann Скилл для написания юнит-тестов: подсказывает, какие тест-двойники брать, как настроить порог покрытия и как проверить тесты мутационным тестированием. CX Codex +1 1 100установок code-testing dotnet Скилл для генерации, починки и усиления тестов: xUnit, MSTest, NUnit, pytest, Vitest/Jest, Go. Точечную работу делает сам, широкую отдаёт субагенту test-engineer. CX Codex +1 863установок unit-testing-framework aj-geddes Скилл задаёт агенту правила написания юнит-тестов: структура Arrange-Act-Assert, моки, граничные случаи. Пригодится, когда нужно покрыть тестами новую функцию или класс. CX Codex +1 593установок

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

vue Скилл по Vue 3 для ИИ-агента: Composition API, реактивность, однофайловые компоненты, Vue Router, Pinia, TypeScript и Vite. Пригодится, когда агент пишет фронтенд на Vue. CX Codex +1 381установок api-documentation Набор правил, по которым агент пишет докстринги, JSDoc, Godoc и описания эндпоинтов. Пригодится, когда API документируют в нескольких агентах и текст расползается. CX Codex +1 379установок software-patterns Помогает выбрать паттерн под конкретную проблему: связанность, отказоустойчивость, границы сервисов. Пригодится, когда код трудно тестировать или сервисы вызывают друг друга по кругу. CX Codex +1 373установок nextjs-v16 Скилл ведёт миграцию проекта на Next.js 16: асинхронные request API, opt-in кеширование через "use cache" и Turbopack. Пригодится, когда обновляете существующее приложение. CX Codex +1 371установок vercel-deployments-builds Описывает жизненный цикл деплоя на Vercel: сборки, превью, фазы релиза и откат. Пригодится, когда настраиваешь вывод сборки или контролируешь релизы. CX Codex +1 368установок stacked-prs Скилл учит агента собирать цепочки зависимых pull request'ов: каждая ветка растёт из предыдущей, а не из main. Пригодится, когда большую фичу разбили на этапы. CX Codex +1 362установок better-auth-core Скилл для настройки Better Auth в TypeScript-приложениях: инстанс, серверные обработчики, клиент и сессии. Пригодится, когда нужно подключить аутентификацию без долгих поисков по докам. CX Codex +1 358установок reporting-pipelines Скилл задаёт единый порядок выгрузки отчётов: собрать данные, нормализовать, выгрузить CSV/JSON/Markdown с меткой времени и сохранить в reports/. CX Codex +1 354установок

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

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