Laratesto 0.9.0: удобнее писать тесты и разбираться в ошибках

Постер Laratesto 0.9.0: ноутбук и три панели для HTTP-запросов, SQL и логов приложения, объединённые зелёной отметкой проверки Laravel
Laratesto 0.9.0: HTTP-клиент, SQL и логи в тестах, понятные ошибки и результаты проверок релиза.

В начале октября я коротко рассказывал о Laratesto — своей связке Laravel и Testo. С тех пор пакет заметно подрос. Сегодня, 21 октября, вышла версия 0.9.0: с отдельным HTTP-клиентом, SQL и логами рядом с результатом теста и более понятными сообщениями об ошибках.

Постер Laratesto 0.9.0: ноутбук и три панели для HTTP-запросов, SQL и логов приложения, объединённые зелёной отметкой проверки
Laratesto 0.9.0 — HTTP, SQL и логи приложения в тестах. Иллюстрация.

Зачем я делаю Laratesto

Мне хочется использовать Testo в Laravel-проектах и сохранить привычные возможности тестирования: запросы к приложению, проверку JSON, авторизацию, базу данных, сессии и команды Artisan. Laratesto берёт на себя запуск приложения и очистку его состояния после теста.

При этом не обязательно переносить всё сразу. Уже написанные тесты PHPUnit или Pest можно оставить рядом, а новые постепенно добавлять на Testo. Именно о таком подходе я писал в октябрьском анонсе проектов.

Что нового в 0.9.0

По сравнению с предыдущим релизом 0.8.3 здесь три основных изменения.

HTTP-клиент без обязательного наследования. Теперь внутри теста с плагином Laravel можно получить клиент через Laratesto::http(). Для этого не нужен свой базовый класс или дополнительный trait. Заголовки, cookies и сессия согласованы с существующими помощниками, а повторный запуск теста получает новый клиент. Старый клиент нельзя случайно использовать в другом выполнении.

SQL и логи приложения рядом с тестом. В настройках можно включить captureSql и captureLogs. Тогда видно, какие запросы выполнялись, сколько времени они заняли и что приложение записало в журнал. Это особенно полезно, когда проверка упала, а одного «получили не тот результат» мало. Значения параметров SQL и контекст логов подключаются отдельно; текст самого запроса и сообщения остаётся как есть.

Ошибка указывает на проверку в тесте. Исправлены стеки вызовов Laravel-проверок: вместо внутренних переходов по коду связки Testo показывает место вызова проверки. Меньше времени на поиск той самой строки, с которой всё началось.

Для меня это развитие одной идеи: тест должен помогать понять проблему, а не просто сообщать, что что-то сломалось. Подробности релиза 0.9.0.

Что успело измениться с начала октября

Между анонсом и нынешним выпуском были и другие обновления. Инструменты переноса тестов вынесены в отдельный пакет laratesto-rector. В Laratesto появились три инструкции для AI-помощников: настройка, написание тестов и перенос из PHPUnit. Доработана очистка состояния Laravel после ошибок запуска и отката транзакций. А в 0.8.3 исправлено обнаружение тестов, чтобы служебные методы связки не попадали в список проверок.

Все изменения по версиям собраны в истории изменений.

Что говорят проверки

Вот результат CI для релизного коммита на PHP 8.5. В таблице — размер наборов, число проверок и пропуски; пропущенные тесты не записываю в прошедшие.

НаборТестовПроверокПропущено
Unit12510652
Laravel1204291
Перенос через Rector43542596
Всего68057539

Итого 671 тест прошёл, 9 пропущены, ошибок нет. Обязательные наборы также прошли на PHP 8.3 и 8.4. Отдельная проверка работы покрытия кода на PHP 8.5 выполнила 2 теста и 16 проверок без пропусков — это проверка совместимости с покрытием, а не процент покрытия всего пакета.

Примеры документации проверены на PHP 8.3.35, 8.4.26 и 8.5.11: по 7 тестов и 10 проверок на каждой версии. Экспериментальная задача для PHP 8.6 пока останавливается на ограничении зависимости nette/schema, до запуска тестов.

Сравнительного замера скорости с прошлой версией пока нет. Поэтому обещаний «стало быстрее в несколько раз» здесь не будет: этот выпуск прежде всего про удобство и диагностику.

Где попробовать

Laratesto 0.9.0 уже опубликован. Пакет рассчитан на Laravel 13; требования к PHP и Testo, установка и примеры есть в README и документации на русском.

На странице Laratesto собираю историю проекта: с чего начинал и что получается по мере разработки.

Оцените статью
( Пока оценок нет )
Блог Ичи

Добавить комментарий