Метод getRejected класса InMemoryTransport
Метод getRejected принадлежит классу InMemoryTransport
и возвращает массив сообщений, которые были отвергнуты
при отправке. Это бывает полезно при тестировании
асинхронной обработки: если получатель выбросил исключение,
сообщение не попадает в очередь, а откладывается как отвергнутое.
Метод не принимает параметров и возвращает массив объектов
Envelope.
Синтаксис
public function getRejected(): array
Пример
Давайте создадим транспорт InMemoryTransport и отправим
в него сообщение, обработчик которого выбрасывает исключение:
<?php
namespace App\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Transport\InMemoryTransport;
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
use Symfony\Component\Messenger\Transport\TransportInterface;
class TransportTest extends TestCase
{
public function testRejected(): void
{
$transport = new InMemoryTransport();
$transport->send(new Envelope(new \stdClass()));
$res = $transport->getRejected();
echo count($res);
}
}
?>
Результат выполнения кода:
0
Пример
Давайте выведем количество отвергнутых и отправленных сообщений после нескольких отправок:
<?php
namespace App\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Transport\InMemoryTransport;
class TransportTest extends TestCase
{
public function testCounts(): void
{
$transport = new InMemoryTransport();
$transport->send(new Envelope(new \stdClass()));
$transport->send(new Envelope(new \stdClass()));
$res = [
'sent' => count($transport->getSent()),
'rejected' => count($transport->getRejected()),
];
print_r($res);
}
}
?>
Результат выполнения кода:
Array
(
[sent] => 2
[rejected] => 0
)
Пример
Давайте сбросим состояние транспорта методом reset
и проверим, что список отвергнутых сообщений очистился:
<?php
namespace App\Tests;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Transport\InMemoryTransport;
class TransportTest extends TestCase
{
public function testReset(): void
{
$transport = new InMemoryTransport();
$transport->send(new Envelope(new \stdClass()));
$transport->reset();
$res = count($transport->getRejected());
echo $res;
}
}
?>
Результат выполнения кода:
0
Смотрите также
-
класс
InMemoryTransport,
который хранит сообщения в памяти для тестов -
метод
getSent,
который возвращает отправленные сообщения -
метод
getAcknowledged,
который возвращает подтверждённые сообщения -
метод
reset,
который очищает состояние транспорта