Продолжаем извлекать полезности из наличия openapi документации на проекте. На очереди пакет https://github.com/thephpleague/openapi-psr7-validator Он умеет валидировать psr-7 запросы и ответы на соответствие схеме. В symfony request и response не соответствуют psr-7, но есть пакеты: symfony/psr-http-message-bridge - "мост" для конвертации в psr-7 nyholm/psr7 - сами объекты запросов-ответов Я вдохновлялся при написании статьей: https://dev.to/rubenrubiob/testing-the-openapi-specification-in-php-5hle Но у нее есть несколько очевидных недостатков:
- Используем invoke, но при этом вызываем методы как $this->service->invoke(). Складывается ощущение, что автор не знает, как именно работают инвоки и зачем они нужны. Да, в классах есть проблема, ведь свойства нельзя вызвать просто так, если их тип callable. Тут мы либо пользуемся хаком: ($this->callableProperty)(), либо перестаем использовать инвоки.
- Вторым недостатком является полное отсутствие кеширование результатов разбора схемы. В итоге, на каждый тест мы заново разбираем схему, что достаточно весомо тормозить процесс. Складывается ощущение, что статья была полностью написана как теоретическая, без реальной проверки работоспособности. В нашей реализации убираем все недостатки. А зачем вообще в тестах сверять ответы с openapi? Убираем лишние телодвижения по типу: $this->assertIsArray($data); $this->assertArrayHasKey('foo'); И так далее, еще строк на 50 :) Примеры кода прикладываю комментарием.