opencode-config/.opencode/skills/run-tests/SKILL.md
2026-07-29 05:14:28 +03:00

43 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: run-tests
description: Use when the user asks to run tests, verify code works, fix errors after edits, or run pytest. Also when user says "запусти тесты", "run tests", "проверь код", "pytest".
---
# Навык запуска тестов и исправления ошибок через Pytest
Когда активирован этот навык, следуй строгому алгоритму работы с тестами.
## 1. Команда запуска
Всегда запускай тесты только через менеджер пакетов `uv`:
`uv run pytest`
## 2. Локальный запуск (оптимизация времени)
Если ты правишь конкретный файл, не запускай весь тестовый люкс сразу. Запусти только связанные тесты, чтобы сэкономить время:
`uv run pytest tests/path_to_test_file.py`
## 3. Временные зависимости (НЕ менять pyproject.toml!)
Если для запуска тестов нужны дополнительные пакеты (pydantic, pyyaml, loguru, pillow, dotenv и т.д.) — используй `uv run --with`:
```bash
uv run --with pytest --with pydantic --with pyyaml --with loguru --with pillow --with python-dotenv pytest tests/... -v
```
**Запрещено:** `uv add <package>` — это меняет `pyproject.toml` и `uv.lock` и создаёт лишний коммит.
**Разрешено:** `uv run --with ...` — зависимости ставятся временно, конфиги не трогаются.
## 4. Конвенции проекта (asyncio_mode = "auto")
В `pyproject.toml` настроено `asyncio_mode = "auto"`.
- `pytest-asyncio` автоматически распознаёт асинхронные тест-функции.
- **Не пиши `@pytest.mark.asyncio` вручную** — он не нужен и считается избыточным.
## 5. Алгоритм исправления ошибок (TDD-like):
1. Запусти тесты и дождись вывода.
2. Если тесты упали, проанализируй traceback ошибки.
3. Исправь код или сам тест (если тест устарел).
4. Запусти упавший тест повторно через `uv run pytest tests/path_to_test_file.py::test_name`.
5. Повторяй цикл, пока тест не пройдет успешно.