Документация Laravel 10.x
Здесь ты найдешь сниппеты по Laravel и полезные советы по веб-разработке.
Laravel создан с учетом тестирования. Фактически, поддержка тестирования с использованием PHPUnit включена по умолчанию, и файл phpunit.xml
уже настроен для вашего приложения. Кроме того, фреймворк поставляется с удобными вспомогательными методами, которые позволяют вам выразительно тестировать ваши приложения.
По умолчанию в каталоге вашего приложения tests
есть два каталога: Feature
и Unit
. Юнит-тесты - это тесты, которые сосредотачиваются на очень маленькой, изолированной части вашего кода. Фактически большинство юнит-тестов, вероятно, сосредотачивается на одном методе. Тесты в каталоге "Unit" не загружают ваше приложение Laravel и, следовательно, не могут получить доступ к базе данных вашего приложения или другим службам фреймворка.
Тесты функциональности могут тестировать большую часть вашего кода, включая то, как взаимодействуют несколько объектов между собой или даже полный HTTP-запрос к JSON-конечной точке. Обычно большинство ваших тестов должны быть тестами функциональности. Эти типы тестов обеспечивают наибольшее доверие тому, что ваша система в целом работает так, как задумано.
В директории tests
вашего приложения предоставляется файл ExampleTest.php
в директориях Feature
и Unit
. После установки нового приложения Laravel выполните команды vendor/bin/phpunit
или php artisan test
, чтобы запустить ваши тесты.
При запуске тестов Laravel автоматически устанавливает окружение конфигурации в testing
из-за переменных окружения, определенных в файле phpunit.xml
. Laravel также автоматически настраивает сеанс и кеш на драйвер array
во время тестирования, что означает, что данные сеанса или кеша не будут сохраняться при тестировании.
Вы вольны определять другие значения конфигурации окружения тестирования по мере необходимости. Переменные окружения testing
можно настроить в файле phpunit.xml
вашего приложения, но не забудьте очистить кеш конфигурации с помощью команды Artisan config:clear
перед запуском ваших тестов!
.env.testing
Кроме того, вы можете создать файл .env.testing
в корне вашего проекта. Этот файл будет использоваться вместо файла .env
при выполнении тестов PHPUnit или выполнении команд Artisan с опцией --env=testing
.
CreatesApplication
Laravel включает трейт CreatesApplication
, который применяется к базовому классу TestCase
вашего приложения. Этот трейт содержит метод createApplication
, который запускает приложение Laravel перед запуском ваших тестов. Важно оставить этот трейт на его первоначальном месте, поскольку некоторые функции, такие как функция параллельного тестирования Laravel, зависят от него.
Для создания нового тестового случая используйте команду Artisan make:test
. По умолчанию тесты будут помещены в каталог tests/Feature
:
php artisan make:test UserTest
Если вы хотите создать тест в каталоге tests/Unit
, вы можете использовать опцию --unit
при выполнении команды make:test
:
php artisan make:test UserTest --unit
Если вы хотите создать Pest PHP тест, вы можете предоставить опцию --pest
команде make:test
:
php artisan make:test UserTest --pestphp artisan make:test UserTest --unit --pest
Примечание Шаблоны тестов могут быть настроены с использованием публикации шаблонов.
После того как тест был создан, вы можете определить методы тестирования, как обычно, с использованием PHPUnit. Чтобы запустить ваши тесты, выполните команду vendor/bin/phpunit
или php artisan test
из вашего терминала:
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase{ /** * Простой пример теста. */ public function test_basic_test(): void { $this->assertTrue(true); }}
Внимание Если вы определяете свои собственные методы
setUp
/tearDown
внутри тестового класса, убедитесь, что вы вызываете соответствующие методыparent::setUp()
/parent::tearDown()
в родительском классе.
Как уже упоминалось, после написания тестов их можно запустить с использованием phpunit
:
./vendor/bin/phpunit
Помимо команды phpunit
, вы можете использовать команду Artisan test
для запуска ваших тестов. Запускаемый тестовый инструмент Artisan предоставляет подробные отчеты о тестах для облегчения разработки и отладки:
php artisan test
Любые аргументы, которые можно передать команде phpunit
, также можно передать команде Artisan test
:
php artisan test --testsuite=Feature --stop-on-failure
По умолчанию Laravel и PHPUnit выполняют ваши тесты последовательно в пределах одного процесса. Однако вы можете значительно сократить время выполнения тестов, выполняя их параллельно в нескольких процессах. Для начала вам следует установить пакет Composer brianium/paratest
в качестве "dev" зависимости. Затем включите опцию --parallel
при выполнении команды Artisan test
:
composer require brianium/paratest --dev php artisan test --parallel
По умолчанию Laravel создаст столько процессов, сколько доступно ядер ЦП на вашем компьютере. Однако вы можете настроить количество процессов, используя опцию --processes
:
php artisan test --parallel --processes=4
Внимание При параллельном выполнении тестов некоторые опции PHPUnit (такие как
--do-not-cache-result
) могут быть недоступны.
При условии, что у вас настроено основное подключение к базе данных, Laravel автоматически обрабатывает создание и миграцию тестовой базы данных для каждого параллельного процесса, который выполняет ваши тесты. Тестовые базы данных будут с суффиксом токена процесса, который уникален для каждого процесса. Например, если у вас есть два параллельных процесса для тестирования, Laravel создаст и будет использовать тестовые базы данных your_db_test_1
и your_db_test_2
.
По умолчанию тестовые базы данных сохраняются между вызовами команды Artisan test
, чтобы их можно было использовать повторно при последующих вызовах команды test
. Однако вы можете их пересоздать, используя опцию --recreate-databases
:
php artisan test --parallel --recreate-databases
Иногда вам может потребоваться подготовить определенные ресурсы, используемые тестами вашего приложения, чтобы их можно было безопасно использовать несколькими процессами тестов.
Используя фасад ParallelTesting
, вы можете указать код, который должен выполняться в setUp
и tearDown
процесса или тестового случая. Переданные замыкания получают переменные $token
и $testCase
, которые содержат токен процесса и текущий тестовый случай соответственно:
<?php namespace App\Providers; use Illuminate\Support\Facades\Artisan;use Illuminate\Support\Facades\ParallelTesting;use Illuminate\Support\ServiceProvider;use PHPUnit\Framework\TestCase; class AppServiceProvider extends ServiceProvider{ /** * Запуск сервисов приложения. */ public function boot(): void { ParallelTesting::setUpProcess(function (int $token) { // ... }); ParallelTesting::setUpTestCase(function (int $token, TestCase $testCase) { // ... }); // Выполняется, когда создается тестовая база данных... ParallelTesting::setUpTestDatabase(function (string $database, int $token) { Artisan::call('db:seed'); }); ParallelTesting::tearDownTestCase(function (int $token, TestCase $testCase) { // ... }); ParallelTesting::tearDownProcess(function (int $token) { // ... }); }}
Если вы хотите получить доступ к текущему "токену" параллельного процесса из любого другого места в коде тестов вашего приложения, вы можете использовать метод token
. Этот токен - уникальный строковый идентификатор для отдельного тестового процесса и может использоваться для сегментации ресурсов по всему параллельному тестовому процессу. Например, Laravel автоматически добавляет этот токен в конец тестовых баз данных, созданных каждым параллельным процессом тестирования:
$token = ParallelTesting::token();
При запуске тестов вашего приложения вы можете захотеть определить, действительно ли ваши тестовые случаи покрывают код приложения и как много кода приложения используется при выполнении ваших тестов. Для этого вы можете указать опцию --coverage
при вызове команды test
:
php artisan test --coverage
Вы можете использовать опцию --min
, чтобы определить минимальный порог охвата тестами для вашего приложения. Тестовый набор завершится с ошибкой, если этот порог не будет достигнут:
php artisan test --coverage --min=80.3
Также инструмент запуска тестов Artisan включает удобный механизм для вывода списка самых медленных тестов вашего приложения. Вызовите команду test
с опцией --profile
, чтобы получить список десяти самых медленных тестов, что позволит вам легко исследовать, какие тесты можно улучшить для ускорения вашего тестового набора:
php artisan test --profile