Поиск…
Вступление
Написание тестируемого кода является важной частью создания надежного, удобного и гибкого проекта. Поддержка самой широко используемой структуры PHP PHPUnit построена прямо в Laravel. PHPUnit настроен с использованием файла phpunit.xml
, который находится в корневом каталоге каждого нового приложения Laravel.
Каталог tests
, также в корневом каталоге, содержит отдельные файлы тестирования, которые содержат логику тестирования каждой части вашего приложения. Разумеется, именно ваша ответственность за разработку этих тестов заключается в том, что вы создаете свое приложение, но Laravel включает примерный файл ExampleTest.php
, чтобы вы ExampleTest.php
.
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5');
}
}
В testBasicExample()
мы testBasicExample()
на страницу индекса сайта и удостоверяемся, что мы видим текст Laravel 5
где-то на этой странице. Если текст отсутствует, тест завершится с ошибкой и вызовет ошибку.
Тест без промежуточного программного обеспечения и новая база данных
Чтобы заставить ремесленника перенести новую базу данных перед запуском тестов, use DatabaseMigrations
. Кроме того, если вы хотите избежать промежуточного программного обеспечения, такого как Auth, use WithoutMiddleware
.
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseMigrations, WithoutMiddleware;
/**
* A basic functional test example.
*
* @return void
*/
public function testExampleIndex()
{
$this->visit('/protected-page')
->see('All good');
}
}
Операции с базами данных для подключения к нескольким базам данных
DatabaseTransactions
trait позволяет базам откатить все изменения во время тестов. Если вы хотите откатить несколько баз данных, вам нужно установить $connectionsToTransact
properties
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack
public function testExampleIndex()
{
$this->visit('/action/parameter')
->see('items');
}
}
Настройка тестирования, использование в базе данных памяти
После установки убедитесь, что среда тестирования (PHPUnit) использует :memory:
database.
конфиг / database.php
'connections' => [
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
.
.
.
./phpunit.xml
.
.
.
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_URL" value="http://example.dev"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite_testing"/>
</php>
</phpunit>
конфигурация
Файл phpunit.xml является конфигурационным файлом по умолчанию для тестов и уже настроен для тестирования с помощью PHPUnit.
Стандартная среда тестирования APP_ENV
определяется как testing
с array
являющимся драйвером кэша CACHE_DRIVER
. При этой настройке никакие данные (сеанс / кеш) не будут сохранены во время тестирования.
Для запуска тестов в отношении определенной среды, такой как усадьба, значения по умолчанию могут быть изменены на:
<env name="DB_HOST" value="192.168.10.10"/>
<env name="DB_DATABASE" value="homestead"/>
<env name="DB_USERNAME" value="homestead"/>
<env name="DB_PASSWORD" value="secret"/>
Или использовать временную базу данных памяти :
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Последнее примечание, которое следует учитывать в документации Laravel :
Обязательно очистите кеш конфигурации, используя команду
config:clear
Artisan перед запуском тестов!