19просмотров
28 июля 2023 г.
Score: 21
Всем доброго времени суток.
Совсем недавно, при написании тестов на Laravel, решили использовать Pest. Изучив его документацию мы поняли что он выглядит гораздо лаконичнее и проще чем PHPUnit. Но мы столкнулись с одной проблемой, когда делаешь Mocking фасадов Laravel, в частности Http::fake() и Http::preventStrayRequests(). Получали следующую ошибку Call to a member function {function} on null Такая ошибка появлялась только в Unit тестах, в Feature же такого не наблюдалось Потратив какое то время на гугление не нашли решение в самом гугле. При обсуждении один из разработчиков вспомнил, что да, действительно, такая же ошибка появляется когда используешь PHPUnit для Unit тестов в Laravel. Там это решается довольно просто. // Меняем данный use в классе теста
use PHPUnit\Framework\TestCase; // на следующий use
use Tests\TestCase; Но тогда возник вопрос, а как сделать так чтобы use Tests\TestCase; использовался в pest? Все оказалось проще, не надо это делать в каждом файле тестов. Просто выполняем команду, которая создаст в корне testing директории Pest.php файл. ./vendor/bin/pest --init В данном файле размещаем следующий код. uses( Tests\TestCase::class,
)->in('Unit'); Что даст нам спокойно делать Mocking фасадов Laravel. Всем спасибо за внимание.