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.
