Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Test Support Laravel Package

yiisoft/test-support

Testing utilities for Yii applications: helpers and fixtures to simplify unit and integration tests, isolate dependencies, and improve readability. Provides common test tools you can reuse across packages and projects.

View on GitHub
Deep Wiki
Context7

Пакет Test Support

Некоторые компоненты кодовой базы в процессе своей работы полагаются на сервисы, отвечающие требованиям PSR-интерфейсов. В целях тестирования таких компонентов разработчику часто приходится описывать собственные урезанные или расширенные однотипные реализации PSR в тестовой среде. Пакет Test Support предоставляет готовые реализации некоторых PSR интерфейсов, предназначенные исключительно для помощи в тестировании вашего кода.

Logger Interface PSR-3

Пакет предоставляет класс SimpleLogger, являющийся реализацией LoggerInterface.

Экземпляр SimpleLogger сохраняет все логгируемые сообщения в массив, который уничтожается вместе с самим экземпляром. Для получения всех логгируемых сообщений используйте метод getMessages().

$logger = new Yiisoft\Test\Support\Log\SimpleLogger();

$logger->emergency('Emergency message', ['key' => 'value']);
$logger->alert('Alert message', ['key' => 'value']);
$logger->critical('Critical message', ['key' => 'value']);
$logger->error('Error message', ['key' => 'value']);
$logger->warning('Warning message', ['key' => 'value']);
$logger->notice('Notice message', ['key' => 'value']);
$logger->info('Info message', ['key' => 'value']);
$logger->debug('Debug message', ['key' => 'value']);

$messages = $logger->getMessages();
/*
[
    ...
    ['level' => 'error', 'message' => 'Error message', 'context' => ['key' => 'value']];
    ['level' => 'warning', 'message' => 'Warning message', 'context' => ['key' => 'value']];
    ...
];
*/

Container Interface PSR-11

В качестве реализации ContainerInterface предлагается класс SimpleContainer.

Это простой контейнер зависимостей, конфигурацию для которого вы передаёте в конструктор. Несмотря на простоту, контейнер гибкий: второй аргумент конструктора принимает замыкание. Оно будет возвращать запрашиваемое у контейнера значение, если оно не задано в конфигурации.

use Yiisoft\Test\Support\Container\SimpleContainer;

$container = new SimpleContainer(
    ['foo' => 'Foo'],
    fn (string $id) => $id === 'bar' ? 'Bar' : 'Not found'
);
$foo = $container->get('foo'); // Foo
$foo = $container->get('bar'); // Bar
$baz = $container->get('baz'); // Not found

Event Dispatcher PSR-14

Интерфейс диспетчера событий EventDispatcherInterface реализуется классом SimpleEventDispatcher.

В конструктор SimpleEventDispatcher вы можете передать любое количество замыканий-слушателей. Диспетчер не содержит сложной логики для определения соответствий событий слушателям, поэтому слушатели сами должны решать, нужно ли им обрабатывать событие. В то же время диспетчер соответствует PSR и учитывает StoppableEventInterface.

Если ваш код отправил в SimpleEventDispatcher событие, то в тестах вы можете проверить это с помощью следующих методов:

  • isObjectTriggered::isObjectTriggered(object $event, int $times = null) — вызван конкретный объект события $event.
  • isClassTriggered::isClassTriggered(string $class, int $times = null) — вызвано событие конкретного класса $class.
  • isInstanceOfTriggered::isInstanceOfTriggered(string $class, int $times = null) — вызвано событие с интерфейсом $class.

Второй параметр $times отвечает за проверку, сколько раз событие было вызвано.

Simple Cache PSR-16

Интерфейс SimpleCacheInterface реализуется сразу двумя классами: MemorySimpleCache, который работает аналогично ArrayCache из пакета yiisoft/cache, и SimpleCacheActionLogger, который запоминает все команды, отправленные в SimpleCacheInterface.

MemorySimpleCache

MemorySimpleCache не использует внешние хранилища для хранения кешируемых значений. Значения сохраняются в виде массива в самом объекте и будут уничтожены вместе с объектом. Используйте MemorySimpleCache в простых случаях, когда не нужно отслеживать историю обращений к кешу.

Для имитации ошибок кеширования в публичных свойствах returnOnSet, returnOnDelete и returnOnClear можно определить возвращаемые значения для соответствующих методов SimpleCacheInterface.

SimpleCacheActionLogger

Класс SimpleCacheActionLogger является декоратором SimpleCacheInterface, посредником, который запоминает все переданные команды, даже если они невалидные (например, ключ содержит недопустимые символы или вообще не является строкой).

Используйте декоратор тогда, когда не достаточно проверить состояние кеша до и после выполнения кода. Например, когда ожидается, что тестируемый сервис должен повторно отправить значение в кеш после первой неудачной попытки.

use Yiisoft\Test\Support\SimpleCache;

$cache = new SimpleCache\MemorySimpleCache();
// Метод MemorySimpleCache::set() будет возвращать false, что соответствует возникновению ошибки, согласно PSR
$cache->returnOnSet = false;

$cacheLogger = new SimpleCache\SimpleCacheActionLogger($cache);
$myService = new myService(/* CacheInterface */ $cacheLogger);

$myService->trySetAction('key', 'value'); // Сервис 3 раза пытается закешировать значение

\PHPUnit\Framework\TestCase::assertSame([
    [SimpleCache\Action::SET, 'key'],
    [SimpleCache\Action::SET, 'key'],
    [SimpleCache\Action::SET, 'key'],
], $cacheLogger->getActionKeyList()); // true. Logger регистрирует три попытки записи в кеш
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport