avto-dev / dev-tools
PHP developer tools
Installs: 60 803
Dependents: 2
Suggesters: 0
Security: 0
Stars: 4
Watchers: 3
Forks: 4
Open Issues: 0
Requires
- php: >=7.2
- ext-json: *
- avto-dev/stacked-dumper-laravel: ^1.1
- phpunit/phpunit: ^7.5 || ~8.0
- tarampampam/guzzle-url-mock: ^1.1
Requires (Dev)
- ext-pdo_sqlite: *
- ext-sqlite3: *
- jeremeamia/superclosure: ^2.4
- laravel/laravel: ^5.6 || ~6.0 || ~7.0
- phpstan/phpstan: ^0.12
Suggests
- codedungeon/phpunit-result-printer: PHPUnit Pretty Result Printer
- jeremeamia/superclosure: Library for closures serialization and hashing
- johnkary/phpunit-speedtrap: Reports on slow-running tests in your PHPUnit test suite
README
PHP developers tools
Install
Require this package with composer using the following command:
$ composer require --dev avto-dev/dev-tools "^2.0"
Installed
composer
is required (how to install composer).
You need to fix the major version of package.
Использование
Данный пакет позволяет легко интегрировать в ваше приложение вспомогательные инструменты, позволяющие более эффективно вести разработку. Разделить их можно на следующие группы:
Вспомогательные сервисы для Laravel
Для Laravel-приложений вы можете подключать следующие сервис-провайдеры:
Сервис-провайдер | Его назначение |
---|---|
DatabaseQueriesLogger | Производит запись всех обращений к базе данных в лог-файл приложения |
Unit-тестирование приложения
В контексте фреймворка
PHPUnit
Bootstrap
Bootstrap - это файл, который выполняется перед запуском всех тестов, единожды. Основная его задача - произвести подготовку среды - создать директории для временных файлов (удалив предыдущие), подготовить схему БД и так далее.
Вы можете указать путь до своего собственного bootstrap-файла в конфигурации PHPUnit
(./phpunit.xml
):
<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="./tests/bootstrap.php"> <!-- configuration --> </phpunit>
Для Laravel-приложений
Написание кода по рекурсивному созданию директорий, соединению с БД может показаться вам довольно утомительным. Для того, чтобы упростить данную задачу вы можете создать свой класс bootsrapper
-а, который умеет поочередное выполнение всех методов внутри себя, начинающихся с префикса boot*
при создании собственного экземпляра. Более того - $this->app
уже хранит инстанс вашего приложения (достаточно подключить нужный трейт). Взгляните на пример:
<?php 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'); } }
И вы всегда имеете "свежую" схему БД перед запуском тестов.
Прочие приложения
Более простая реализация:
<?php 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-тестов
Для более удобного тестирования вашего приложения вы можете использовать абстрактные классы Unit-тестов, поставляемых с данным пакетом (имеются версии как для Laravel-приложений, так и без данной зависимости).
Их отличительная особенность заключается в том, что они содержат дополнительные assert
-методы, которые позволят вам писать писать более лаконичные и выразительные тесты. Данный функционал подключается с помощью трейтов, так что вы сможете при необходимости составить свой собственный абстрактный класс (не наследованный от поставляемого) с необходимым набором "фишек".
Рекомендация использовать абстрактные классы обусловлена тем, что их функционал с течением времени будет расширяться, и вы сможете получать их новые возможности при помощи одной лишь команды composer update avto-dev/dev-tools
.
Для Laravel-приложений
Наследуйте классы своих тестов от AvtoDev\DevTools\Tests\PHPUnit\AbstractLaravelTestCase
.
Прочие приложения
Наследуйте классы своих тестов от AvtoDev\DevTools\Tests\PHPUnit\AbstractTestCase
.
PHPUnit-трейты
Ниже в виде сводной таблицы представлены имена трейтов и поставляемый с ними функционал. Все трейты расположены в 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 |
Testing
For package testing we use phpunit
framework and docker-ce
+ docker-compose
as develop environment. So, just write into your terminal after repository cloning:
$ make build $ make latest # or 'make lowest' $ make test
Changes log
Changes log can be found here.
Support
If you will find any package errors, please, make an issue in current repository.
License
This is open-sourced software licensed under the MIT License.