Отладка JavaScript и TypeScript может съесть весь день. Особенно когда баг плавающий, стектрейс указывает не туда, а тесты падают через раз. Я собрал 14 промтов, которые превращают ChatGPT в напарника по отладке, тестированию и поиску утечек памяти. Каждый промт — с примером входа, ожидаемым результатом и ситуацией, где он реально спасает.
Все промты проверены на реальных проектах: от небольших Express-сервисов до React-приложений с тысячами компонентов. Вы можете копировать их и сразу вставлять свой код.
1. Воспроизведение бага по описанию
Когда баг воспроизводится только у пользователей, а у вас — нет. Промт помогает сгенерировать минимальный воспроизводимый пример.
Промт:
"У меня есть баг в JavaScript: [описание]. Я не могу воспроизвести его локально. Предложи минимальный код, который гарантированно воспроизведёт проблему, и объясни, какие условия для этого нужны."
Пример:
Пользователи жаловались, что форма отправляется дважды при быстром двойном клике. Промт выдал пример с асинхронным обработчиком и отсутствием блокировки кнопки. Мы добавили disabled на время запроса — баг ушёл.
2. Анализ стектрейса с контекстом
Стектрейс из минифицированного кода бесполезен. Промт помогает восстановить логику.
Промт:
"Вот стектрейс ошибки: [стектрейс]. Вот соответствующий код: [фрагмент]. Объясни, что могло пойти не так, и предложи исправление. Учти, что код может быть минифицирован."
Пример:
Ошибка TypeError: Cannot read property 'map' of undefined возникала в проде, но не в dev. Промт подсказал, что API может возвращать null вместо массива. Добавили проверку Array.isArray(data) ? data : [].
3. Генерация unit-тестов на Jest для функции
Пишете тесты после кода? Промт создаст каркас.
Промт:
"Напиши unit-тесты на Jest для этой функции: [код]. Покрой основные сценарии, граничные случаи и ошибки. Используй describe, it, expect."
Пример:
Функция calculateDiscount(price, userType) возвращала скидку. Тесты выявили, что при userType = 'guest' скидка не должна применяться, но код её давал. Исправили.
4. Поиск утечек памяти в Node.js
Утечки в долгоживущих процессах — боль. Промт помогает проанализировать heap snapshot.
Промт:
"У меня есть heap snapshot из Node.js. Вот вывод --inspect и подозрительные объекты: [данные]. Как найти утечку? Предложи шаги и код для диагностики."
Пример:
Сервис падал через сутки. Промт указал на глобальный массив, который накапливал запросы. Заменили на WeakMap — память стабилизировалась.
5. Написание e2e-теста на Playwright
E2E-тесты сложно поддерживать. Промт генерирует сценарий по шагам.
Промт:
"Создай e2e-тест на Playwright для сценария: [описание шагов]. Используй test, page.goto, page.click, expect."
Пример:
Тест на оформление заказа: логин, добавление товара, оплата. Промт сгенерировал код с ожиданиями и проверками. Мы добавили data-testid для стабильности.
6. Отладка асинхронного кода
Промисы и async/await часто приводят к неожиданным результатам.
Промт:
"Этот асинхронный код работает не так, как ожидается: [код]. Опиши, что происходит на каждом шаге, и предложи исправление."
Пример:
Promise.all не ждал все промисы из-за отсутствия await внутри map. Промт показал, что нужно await Promise.all(array.map(async ...)).
7. Рефакторинг тестов на Vitest
Переход с Jest на Vitest? Промт поможет.
Промт:
"Перепиши эти тесты с Jest на Vitest: [код]. Учти различия в API и настройках."
Пример:
Заменили jest.mock на vi.mock, jest.fn на vi.fn. Тесты заработали без изменений логики.
8. Генерация моков для API
Тестирование с реальными API — медленно и нестабильно.
Промт:
"Создай мок-сервер на Express для этих эндпоинтов: [список]. Возвращай тестовые данные в формате JSON."
Пример:
Мок для /users и /orders позволил тестировать фронтенд без бэкенда. Сэкономили часы на ожидании.
9. Поиск причины флаки-тестов
Тесты, которые падают через раз, — кошмар.
Промт:
"Этот тест иногда падает: [код]. Проанализируй возможные причины (тайминги, порядок, состояние) и предложи исправления."
Пример:
Тест зависел от времени. Промт предложил использовать vi.useFakeTimers() и мокировать Date.now.
10. Оптимизация производительности с профилировкой
Медленный код? Промт поможет найти узкое место.
Промт:
"Вот профиль производительности из Chrome DevTools: [данные]. Где узкое место? Предложи оптимизации."
Пример:
Рендер списка из 1000 элементов занимал 2 секунды. Промт указал на отсутствие виртуализации. Подключили react-window — стало 200 мс.
11. Написание тестов для React-компонентов
Тестирование UI — отдельное искусство.
Промт:
"Напиши тесты на React Testing Library для компонента: [код]. Проверь рендер, клики и состояние."
Пример:
Тест на кнопку «Добавить в корзину» выявил, что обработчик не вызывается при disabled. Исправили условие.
12. Отладка TypeScript-типов
Сложные типы могут запутать.
Промт:
"Почему этот код вызывает ошибку TypeScript: [код]? Объясни и предложи исправление типа."
Пример:
Ошибка Type 'string' is not assignable to type 'never' в switch. Промт показал, что не все случаи покрыты. Добавили default.
13. Генерация тестовых данных (fixtures)
Ручное создание данных утомляет.
Промт:
"Сгенерируй массив тестовых объектов для сущности 'Product' с полями: id, name, price, category. 10 штук."
Пример:
Фикстуры для тестов корзины. Промт создал JSON с реалистичными названиями и ценами.
14. Интеграция с CI/CD для автотестов
Чтобы тесты запускались автоматически.
Промт:
"Настрой GitHub Actions для запуска тестов на Jest при пуше в main. Вот package.json: [код]."
Пример:
Workflow с шагами npm install, npm test. Тесты стали запускаться на каждый коммит.
Эти промты — не серебряная пуля, но они экономят время и снижают количество ошибок. Главное — адаптировать их под свой контекст и не бояться экспериментировать. Попробуйте хотя бы три из них на следующем баге — и вы удивитесь, насколько быстрее пойдёт отладка.
Если у вас есть свои любимые промты для отладки — делитесь в комментариях. А если хотите глубже прокачать навыки работы с AI в разработке, загляните в наш блог — там ещё много практических материалов.
Комментарии