Может войдёшь?
Черновики Написать статью Профиль

Тестирование

перевод документация 4.x

  1. 1. Введение
  2. 2. Определение тестов для выполнения
  3. 3. Тестовое окружение
  4. 4. Обращение к маршрутам
  5. 5. DomCrawler
  6. 6. Тестирование фасадов
  7. 7. Проверки (assertions)
  8. 8. Вспомогательные методы
  9. 9. Обновление приложения
Этот перевод актуален для англоязычной документации на (ветка 4.2) , (ветка 4.1) и (ветка 4.0). Опечатка? Выдели и нажми Ctrl+Enter.

Введение

Laravel построен с учётом тестирования. Фактически, поддержка PHPUnit доступна по умолчанию, а файл phpunit.xml уже настроен для вашего приложения. В дополнение к PHPUnit Laravel также использует компоненты Symfony HttpKernel, DomCrawler и BrowserKit для проверки и манипулирования шаблонами для симуляции работы браузера.

Папка app/tests уже содержит файл теста для примера. После установки нового приложения Laravel просто выполните команду phpunit для запуска процесса тестирования.

Определение тестов для выполнения

Для создания теста просто создайте новый файл в папке app/tests. Класс теста должен наследовать класс PHPTestCase. Вы можете объявлять методы тестов как вы обычно объявляете их для PHPUnit.

Пример тестового класса

PHP
class FooTest extends TestCase {

  public function 
testSomethingIsTrue()
  {
    
$this->assertTrue(true);
  }
}

Вы можете запустить все тесты в вашем приложении через командную строку командой phpunit.

Внимание: если вы определили собственный метод PHPsetUp(), не забудьте вызвать PHPparent::setUp().

Тестовое окружение

Во время выполнения тестов Laravel автоматически установит текущую среду в testing. Кроме этого Laravel подключит настройки тестовой среды для сессии и кэширования. Оба эти драйвера устанавливаются в array, что позволяет данным существовать в памяти, пока работают тесты. Вы можете свободно создать любое другое тестовое окружение по необходимости.

Обращение к маршрутам

Вызов маршрута из теста

Вы можете легко вызвать любой ваш маршрут методом PHPcall():

PHP
$response $this->call('GET''user/profile');

$response $this->call($method$uri$parameters$files$server$content);

После этого вы можете обращаться к свойствам объекта PHPIlluminate\Http\Response:

PHP
$this->assertEquals('Hello World'$response->getContent());

Вызов контроллера из теста

Вы также можете вызвать из теста любой контроллер:

PHP
$response $this->action('GET''HomeController@index');

$response $this->action('GET''UserController@profile', array('user' => 1));

Метод PHPgetContent() вернёт содержимое-строку ответа маршрута или контроллера. Если был возвращён PHPView, вы можете получить его через свойство PHP$original:

PHP
$view $response->original;

$this->assertEquals('John'$view['name']);

Для вызова HTTPS-маршрута можно использовать метод PHPcallSecure():

PHP
$response $this->callSecure('GET''foo/bar');

Внимание: фильтры маршрутов отключены в тестовой среде. Для их включения добавьте в тест вызов PHPRoute::enableFilters().

DomCrawler

Вы можете вызвать ваш маршрут и получить объект PHPDomCrawler, который может использоваться для проверки содержимого ответа:

PHP
$crawler $this->client->request('GET''/');

$this->assertTrue($this->client->getResponse()->isOk());

$this->assertCount(1$crawler->filter('h1:contains("Hello World!")'));

Для более подробной информации о его использовании обратитесь к официальной документации.

Тестирование фасадов

При тестировании вам может потребоваться отловить вызов к одному из статических классов-фасадов Laravel. К примеру, у вас есть такой контроллер:

PHP
public function getIndex()
{
  
Event::fire('foo', array('name' => 'Дейл'));

  return 
'All done!';
}

Вы можете отловить обращение к PHPEvent с помощью метода PHPshouldReceive() этого фасада, который вернёт объект Mockery.

Тестирование фасада PHPEvent

PHP
public function testGetIndex()
{
  
Event::shouldReceive('fire')->once()->with('foo', array('name' => 'Дейл'));

  
$this->call('GET''/');
}

Внимание: не делайте этого для объекта PHPRequest. Вместо этого, передайте желаемый ввод методу PHPcall() во время выполнения вашего теста.

Проверки (assertions)

Laravel предоставляет несколько assert-методов, чтобы сделать ваши тесты немного проще.

Проверка на успешный запрос

PHP
public function testMethod()
{
  
$this->call('GET''/');

  
$this->assertResponseOk();
}

Проверка статуса ответа

PHP
$this->assertResponseStatus(403);

Проверка переадресации в ответе

PHP
$this->assertRedirectedTo('foo');

$this->assertRedirectedToRoute('route.name');

$this->assertRedirectedToAction('Controller@method');

Проверка наличия данных в шаблоне

PHP
public function testMethod()
{
  
$this->call('GET''/');

  
$this->assertViewHas('name');
  
$this->assertViewHas('age'$value);
}

Проверка наличия данных в сессии

PHP
public function testMethod()
{
  
$this->call('GET''/');

  
$this->assertSessionHas('name');
  
$this->assertSessionHas('age'$value);
}
+ 4.1

добавлено в 4.1 ()

Проверка наличия ошибок в сессии

PHP
  public function testMethod()
  {
      
$this->call('GET''/');

      
$this->assertSessionHasErrors();

      
// Проверка наличия в сессии ошибок по заданному значению...
      
$this->assertSessionHasErrors('name');

      
// Проверка наличия в сессии ошибок по нескольким значениям...
      
$this->assertSessionHasErrors(array('name''age'));
  }

Проверка наличия данных в старом вводе

PHP
public function testMethod()
{
  
$this->call('GET''/');

  
$this->assertHasOldInput();
}

Вспомогательные методы

Класс PHPTestCase содержит несколько вспомогательных методов для упрощения тестирования вашего приложения.

+ 4.1

добавлено в 4.1 ()

Установка и очистка сессий из теста

PHP
$this->session(['foo' => 'bar']);

$this->flushSession();

Установка текущего авторизованного пользователя

Вы можете установить текущего авторизованного пользователя с помощью метода PHPbe():

PHP
$user = new User(array('name' => 'John'));

$this->be($user);

Вы можете заполнить вашу БД начальными данными изнутри теста методом PHPseed().

Заполнение БД тестовыми данными

PHP
$this->seed();

$this->seed($connection);

Больше информации на тему начальных данных доступно в разделе о миграциях.

+ 4.1

добавлено в 4.1 ()

Обновление приложения

Как вы уже знаете, вы можете получить доступ к Laravel Application/IoC-контейнеру с помощью PHP$this->app из любого тестового метода. Этот экземпляр приложения обновляется для каждого тестового класса. Если вы хотите вручную обновить приложение для определённого метода, вы можете использовать метод PHPrefreshApplication() из этого тестового метода. Это приведет к сбросу дополнительных привязок, таких как заглушки, которые были помещены в IoC-контейнер после запуска теста.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.