Тестирование: начало работы

Введение

Laravel построен с учётом тестирования. Фактически, поддержка PHPUnit доступна по умолчанию, а файл phpunit.xml уже настроен для вашего приложения. Также фреймворк содержит удобные методы для полноценного тестирования ваших приложений.

По умолчанию в директории tests вашего приложения содержатся две директории: Feature и Unit. Юнит-тесты - тесты, которые концентрируются на очень маленькой, изолированной части вашего кода. Фактически, большинство юнит-тестов скорее всего сосредоточены на одном методе. Функциональные тесты могут тестировать большую часть вашего кода, включая то, как несколько объектов взаимодействуют друг с другом или даже полный HTTP-запрос конечной точке JSON.

Файл ExampleTest.php расположен в обоих тестовых директориях: в Feature и в Unit. Поле установки нового приложения Laravel просто выполните phpunit в командной строке, чтобы запустить свои тесты.

Среда

При выполнении тестов через phpunit, Laravel автоматически задаст настройки среды testing из-за переменных среды, определенных в файле phpunit.xml. Laravel также автоматически настроит сессии и кэш на драйвер array во время тестирования, а значит данные сессий и кэша не сохранятся при тестировании.

При необходимости вы можете создать другие настройки для тестовой среды. Переменные среды testing можно настроить в файле phpunit.xml, но перед запуском тестов не забудьте очистить кэш настроек с помощью Artisan-команды config:clear!

Создание и выполнение тестов

Для создания нового тест-кейса используйте Artisan-команду make:test:

// Создать тест в директории Feature...
php artisan make:test UserTest

// Создать тест в директории Unit...
php artisan make:test UserTest --unit

Как только был сгенерирован тест, вы можете задать методы теста так, как сделали бы это при обычном использовании PHPUnit. Просто выполните команду phpunit в терминале, чтобы запустить тесты:

<?php

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    /**
     * Пример теста.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $this->assertTrue(true);
    }
}

{note} Если вы определили собственный метод setUp в классе теста, не забудьте вызвать parent::setUp().