Require this package with composer using the following command:
$ composer require --dev avto-dev/dev-tools "^1.10"
Installed
composer
is required (how to install composer).
You need to fix the major version of package.
Данный пакет позволяет легко интегрировать в ваше приложение вспомогательные инструменты, позволяющие более эффективно вести разработку. Разделить их можно на следующие группы:
Имя функции | Её назначение |
---|---|
\dev\dd(...$arguments) |
Выводит удобочитаемый дамп переданных в функцию значений, бросив специальным образом оформленное исключение (при вызове в HTTP-контексте; в CLI контексте работает как обычная \dd(...) ) * |
\dev\dump(...$arguments) |
Выводит удобочитаемый дамп переданных в функцию значений не прерывая обработку запроса. Необходима регистрация сервис-провайдера VarDumper (при вызове в HTTP-контексте; в CLI контексте работает как обычная \dump(...) ) * |
* корректно работает в связке Laravel + RoadRunner (возможно и ReactPHP - не проверено)
Для Laravel-приложений вы можете подключать следующие сервис-провайдеры:
Сервис-провайдер | Его назначение |
---|---|
DatabaseQueriesLogger | Производит запись всех обращений к базе данных в лог-файл приложения |
VarDumper | Модифицирует HTTP-ответ приложения, добавляя в него результат работы вызовов функции \dev\dump() . Данный сервис-провайдер регистрируется автоматически |
В контексте фреймворка
PHPUnit
Bootstrap - это файл, который выполняется перед запуском всех тестов, единожды. Основная его задача - произвести подготовку среды - создать директории для временных файлов (удалив предыдущие), подготовить схему БД и так далее.
Вы можете указать путь до своего собственного bootstrap-файла в конфигурации PHPUnit
(./phpunit.xml
):
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="./tests/bootstrap.php">
<!-- configuration -->
</phpunit>
Написание кода по рекурсивному созданию директорий, соединению с БД может показаться вам довольно утомительным. Для того, чтобы упростить данную задачу вы можете создать свой класс bootsrapper
-а, который умеет поочередное выполнение всех методов внутри себя, начинающихся с префикса boot*
при создании собственного экземпляра. Более того - $this->app
уже хранит инстанс вашего приложения (достаточно подключить нужный трейт). Взгляните на пример:
class MyBootstrap extends AvtoDev\DevTools\Tests\Bootstrap\AbstractLaravelTestsBootstrapper
{
use AvtoDev\DevTools\Tests\PHPUnit\Traits\CreatesApplicationTrait;
public function bootPrepareDatabase()
{
$this->app->make(Illuminate\Contracts\Console\Kernel::class)->call('migrate:refresh');
}
}
И вы всегда имеете "свежую" схему БД перед запуском тестов.
Более простая реализация:
class MyBootstrap extends \AvtoDev\DevTools\Tests\Bootstrap\AbstractTestsBootstrapper
{
public function bootMakeSome()
{
// Put your code here
}
public function bootMakeSomethingElse()
{
// Put your code here
}
}
В обоих случаях не забудьте создать файл
./tests/bootstrap.php
, написав в нём<?php new MyBootstrap();
, указав<phpunit bootstrap="./tests/bootstrap.php">
в конфигурацииPHPUnit
.
Для более удобного тестирования вашего приложения вы можете использовать абстрактные классы Unit-тестов, поставляемых с данным пакетом (имеются версии как для Laravel-приложений, так и без данной зависимости).
Их отличительная особенность заключается в том, что они содержат дополнительные assert
-методы, которые позволят вам писать писать более лаконичные и выразительные тесты. Данный функционал подключается с помощью трейтов, так что вы сможете при необходимости составить свой собственный абстрактный класс (не наследованный от поставляемого) с необходимым набором "фишек".
Рекомендация использовать абстрактные классы обусловлена тем, что их функционал с течением времени будет расширяться, и вы сможете получать их новые возможности при помощи одной лишь команды composer update avto-dev/dev-tools
.
Наследуйте классы своих тестов от AvtoDev\DevTools\Tests\PHPUnit\AbstractLaravelTestCase
.
Наследуйте классы своих тестов от AvtoDev\DevTools\Tests\PHPUnit\AbstractTestCase
.
Ниже в виде сводной таблицы представлены имена трейтов и поставляемый с ними функционал. Все трейты расположены в AvtoDev\DevTools\Tests\PHPUnit\Traits
:
Имя трейта | Функционал |
---|---|
AdditionalAssertionsTrait |
Дополнительные assert-методы |
CreatesApplicationTrait |
Метод, создающий инстанс Laravel-приложения. При его использовании появляется возможность использовать методы beforeApplicationBootstrapped и afterApplicationBootstrapped |
InstancesAccessorsTrait |
Методы доступа к protected\private методам\свойствам у классов (с помощью рефлексии) |
LaravelEventsAssertionsTrait |
Методы тестирования событий (events) и их слушателей (listeners) |
LaravelLogFilesAssertsTrait |
Методы тестирования лог-файлов Laravel приложения |
LaravelCommandsAssertionsTrait |
Методы тестирования Laravel artisan комманд |
WithDatabaseQueriesLogging |
Подключая данный трейт в класс теста - все запросы к БД будут записываться в log-файл (класс теста должен наследоваться при этом от AbstractLaravelTestCase ) |
CarbonAssertionsTrait |
Методы для тестирования Carbon -объектов |
WithDatabaseDisconnects |
Подключая данный трейт в класс теста - на tearDown происходит отключение от всех БД (причина) |
WithMemoryClean |
Подключая данный трейт в класс теста - на tearDown происходит очистка свойств класса. Для использования этого трейта вне Laravel-framework необходимо вызывать метод clearMemory на tearDown интересующего класса |
WithGuzzleMocking |
Трейт, поставляющий метод создания хэндлера-обработчика запросов HTTP клиента Guzzle 6 |
AppVersionAssertionsTrait |
Методы для проверки версии приложения и крайней версии, указанной в файле CHANGELOG.md |
LaravelRoutesAssertsTrait |
Методы для проверки правильной настройки роутов Laravel |
For package testing we use phpunit
framework. Just write into your terminal:
$ git clone git@github.com:avto-dev/dev-tools.git ./dev-tools && cd $_
$ composer install
$ composer test
Changes log can be found here.
If you will find any package errors, please, make an issue in current repository.
This is open-sourced software licensed under the MIT License.