Метод getSent класса InMemoryTransport
Метод getSent класса InMemoryTransport
возвращает массив всех сообщений, которые были
отправлены через транспорт во время теста. Каждый
элемент массива - это объект сообщения с методами
getMessage и getEnvelope. Метод не
принимает параметров и используется для проверки
того, что приложение корректно отправило сообщение
в очередь.
Синтаксис
public function getSent(): array
Пример
Давайте настроим транспорт in-memory в
конфигурации тестового окружения:
framework:
messenger:
transports:
async:
dsn: 'in-memory://'
Теперь напишем тест, который отправляет сообщение
и проверяет его через getSent:
<?php
namespace App\Tests;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Transport\InMemoryTransport;
class MessageTest extends KernelTestCase
{
public function testMessageSent(): void
{
self::bootKernel();
$container = static::getContainer();
$bus = $container->get(MessageBusInterface::class);
$transport = $container->get('messenger.transport.async');
$bus->dispatch(new ArticleMessage('hello'));
$sent = $transport->getSent();
$this->assertCount(1, $sent);
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте извлечём само сообщение из массива отправленных и проверим его содержимое:
<?php
namespace App\Tests;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Messenger\MessageBusInterface;
class MessageTest extends KernelTestCase
{
public function testMessageContent(): void
{
self::bootKernel();
$container = static::getContainer();
$bus = $container->get(MessageBusInterface::class);
$transport = $container->get('messenger.transport.async');
$bus->dispatch(new ArticleMessage('abcde'));
$sent = $transport->getSent();
$message = $sent[0]->getMessage();
$this->assertSame('abcde', $message->getText());
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Пример
Давайте отправим два сообщения и проверим,
что getSent вернёт оба:
<?php
namespace App\Tests;
use App\Message\ArticleMessage;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Messenger\MessageBusInterface;
class MessageTest extends KernelTestCase
{
public function testMultipleMessages(): void
{
self::bootKernel();
$container = static::getContainer();
$bus = $container->get(MessageBusInterface::class);
$transport = $container->get('messenger.transport.async');
$bus->dispatch(new ArticleMessage('hello'));
$bus->dispatch(new ArticleMessage('user'));
$sent = $transport->getSent();
$texts = [];
foreach ($sent as $envelope) {
$texts[] = $envelope->getMessage()->getText();
}
$this->assertSame(['hello', 'user'], $texts);
}
}
?>
Результат выполнения теста:
"OK (1 test, 1 assertion)"
Смотрите также
-
класс
InMemoryTransport,
который эмулирует транспорт Messenger в тестах -
метод
getAcknowledged,
который возвращает подтверждённые сообщения -
метод
getRejected,
который возвращает отклонённые сообщения -
метод
reset,
который очищает все сохранённые сообщения