Введение
Unit-тесты и интеграционные тесты — основа надежного кода. Но писать их вручную утомительно и долго. Современные AI-ассистенты (ChatGPT, Claude, Gemini) умеют генерировать качественные тесты на Python (pytest, unittest) и JavaScript (Jest), если дать им правильный промт. В этой подборке — 10 проверенных промтов, которые я использую сам. Каждый сопровождается реальным примером и кодом. Вы сэкономите часы и получите покрытие, которое выявит баги до продакшена.
1. Базовый тест с фикстурой (pytest)
Промт: «Напиши pytest-тест для функции calculate_discount(price, discount). Используй фикстуру для подготовки тестовых данных. Проверь пограничные случаи: 0 скидка, 100% скидка, отрицательная цена.»
Пример использования: Функция calculate_discount(price, discount) возвращает цену со скидкой в процентах. AI сгенерировал:
import pytest
@pytest.fixture
def sample_prices():
return [100, 0, -50, 200]
def test_calculate_discount(sample_prices):
from my_module import calculate_discount
assert calculate_discount(100, 10) == 90
assert calculate_discount(100, 0) == 100
assert calculate_discount(100, 100) == 0
with pytest.raises(ValueError):
calculate_discount(-10, 20)
Результат: 5 тестов за 30 секунд, покрыты краевые случаи.
2. Параметризация (pytest)
Промт: «Перепиши тест для функции is_valid_email(email) с использованием @pytest.mark.parametrize. Включи 10 разных кейсов: валидные/невалидные адреса, пустая строка, None.»
Пример: AI сгенерировал компактный набор тестов, который проверяет все кейсы одной функцией. Экономит 80% строк кода.
3. Мокирование внешнего API (pytest + pytest-mock)
Промт: «Напиши тест для функции get_weather(city), которая вызывает внешний API. Используй mocker.patch, чтобы подменить вызов requests.get. Проверь успешный ответ и ошибку 404.»
Фрагмент:
def test_get_weather_success(mocker):
mock_response = mocker.Mock(status_code=200)
mock_response.json.return_value = {'temp': 20}
mocker.patch('requests.get', return_value=mock_response)
assert get_weather('Moscow') == 20
4. Тест асинхронного кода (pytest-asyncio)
Промт: «Напиши тест для асинхронной функции fetch_data(url). Используй pytest-asyncio и mocker для подмены aiohttp.ClientSession.get.»
Польза: AI корректно обрабатывает корутины, расставляет await и декораторы.
5. Unit-тест с unittest (Python)
Промт: «Создай тестовый класс для класса ShoppingCart с методами add_item, remove_item, get_total. Используй setUp для инициализации корзины. Добавь 4 тест-кейса.»
Пример:
import unittest
from cart import ShoppingCart
class TestShoppingCart(unittest.TestCase):
def setUp(self):
self.cart = ShoppingCart()
def test_add_item(self):
self.cart.add_item('apple', 1.5)
self.assertEqual(self.cart.get_total(), 1.5)
def test_remove_item(self):
self.cart.add_item('apple', 1.5)
self.cart.remove_item('apple')
self.assertEqual(self.cart.get_total(), 0)
6. Тесты с Jest для Node.js
Промт: «Напиши тест для функции add(a, b) на Jest. Используй describe и it. Проверь числа, строки и NaN.»
Код:
describe('add', () => {
it('returns sum of two numbers', () => {
expect(add(2, 3)).toBe(5);
});
it('returns NaN for invalid input', () => {
expect(add('a', 2)).toBeNaN();
});
});
7. Мокирование модулей в Jest
Промт: «Протестируй функцию fetchUser(id), которая вызывает axios.get. Замокай модуль axios и проверь, что функция возвращает пользователя.»
Результат: AI создаёт __mocks__ или использует jest.mock, что ускоряет настройку в 2 раза.
8. Интеграционный тест для REST API (pytest + httpx)
Промт: «Напиши интеграционный тест для эндпоинта POST /api/users. Отправь JSON с именем и email, проверь код 201 и тело ответа. Используй реальный запуск приложения через TestClient из FastAPI.»
Фрагмент:
from fastapi.testclient import TestClient
from app import app
client = TestClient(app)
def test_create_user():
response = client.post('/api/users', json={'name': 'Alice', 'email': 'alice@test.com'})
assert response.status_code == 201
assert response.json()['id'] > 0
9. Тест работы с базой данных (pytest + SQLite in-memory)
Промт: «Напиши тест для функции add_user(db_session, name), которая сохраняет пользователя в БД. Используй фикстуру для временной базы SQLite in-memory. Проверь, что добавленная запись есть.»
Помогает: AI корректно создаёт сессию, таблицы и чистит данные после теста.
10. Сниппет для coverage (pytest-cov)
Промт: «Сгенерируй набор тестов для модуля utils.py, который содержит 5 функций. Уровень покрытия — 90%+. Используй pytest-cov для отчёта.»
Результат: AI анализирует код модуля и предлагает тесты для непокрытых строк. Экономит время на ручном поиске пропусков.
Заключение
Эти 10 промтов покрывают 95% типовых задач тестирования: от простых unit-тестов до интеграционных с API и БД. Скопируйте подходящий промт, замените название функции и данные — AI сделает остальное. Для углублённого изучения рекомендую официальную документацию pytest, Jest и unittest. Начните применять их прямо сейчас — первый же тест сэкономит вам часы отладки.
Комментарии