Pest — фреймворк для написания тестов с упором на простоту. В этой статье я расскажу вам как использовать его в Laravel.
Давайте для начала его установим:
composer require pestphp/pest --dev
Напомню, какие в Laravel дефолтные тесты:
PEST — это прогрессивнsq фреймворк для тестирования, поэтому стандартный набор тестов в Laravel, написанный на PHPUnit, также будет работать, даже если вы запустите его pest-командой:
Напоминание: Pest это надстройка над PHPUnit. Просто другой API для создания тестов.
Давайте посмотрим на содержимое tests/Unit/ExampleTest.php
:
namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $this->assertTrue(true); } }
Теперь, давайте перепишем базовый модульный тест на Pest:
test('basic', function () { $this->assertTrue(true); });
Благодаря Pest, ассерты (asserts — утверждения) доступны глобально, поэтому мы можем удалить переменную $this
:
test('basic', function () { assertTrue(true); });
И, поскольку, Pest поддерживает сообщения высшего порядка (higher-order messages), то мы можем сделать все в одну строку:
test('basic')->assertTrue(true);
Великолепно! Теперь давайте посмотрим на tests/Feature/ExampleTest.php
:
namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function testBasicTest() { $response = $this->get('/'); $response->assertStatus(200); } }
В Pest мы можем переписать этот тест следующим образом:
uses(Tests\TestCase::class); it('has welcome page', function () { $response = $this->get('/'); $response->assertStatus(200); });
Обратите внимание, что функция it
является псевдонимом для test
, и она добавляет префикс «it» к описанию теста:
И опять таки, благодаря поддержке сообщений высшего порядка, мы можем упросить запись этого теста:
uses(Tests\TestCase::class); it('has welcome page')->get('/')->assertStatus(200);
Кроме того, возможно мы захотим использовать этот Tests\TestCase::class
для всех тестов в папке Feature
. Давайте создадим файл Pest.php
в корне папки tests
со следующим содержимым:
uses(Tests\TestCase::class)->in('Feature');
Теперь мы можем удалить uses
из нашего теста:
it('has welcome page')->get('/')->assertStatus(200);
И, наконец, как, впрочем, и ожидалось, конечный результат практически как и исходный:
Автор: Nuno Maduro
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.