РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1129 of 1361 menu

Метод assertEmailIsQueued

Метод assertEmailIsQueued проверяет, что письмо попало в очередь на отправку. Он используется в тестах приложения вместе с WebTestCase и профилировщиком. Метод вешается на объект теста и принимает первым параметром индекс письма в очереди. Если письма с таким индексом нет или оно не поставлено в очередь, тест падает.

Метод удобно применять, когда отправка писем настроена через Messenger, а не выполняется сразу. В этом случае письмо не уходит моментально, а кладётся в транспорт, и assertEmailIsQueued подтверждает это поведение.

Синтаксис

assertEmailIsQueued(int $index = 0): void

Параметр $index задаёт порядковый номер письма в очереди. Нумерация начинается с нуля, поэтому первое письмо имеет индекс 0. Если параметр не указан, проверяется первое письмо.

Пример

Давайте напишем тест, который проверяет, что после запроса письмо попало в очередь. Сначала создадим контроллер, отправляющий письмо:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMailerMailerInterface; use SymfonyComponentMimeEmail; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_index')] public function index(MailerInterface $mailer): Response { $email = (new Email()) ->from('hello@example.com') ->to('user@example.com') ->subject('article') ->text('abcde'); $mailer->send($email); return new Response('sent'); } } ?>

Теперь напишем тест, который проверяет, что письмо поставлено в очередь:

<?php namespace AppTestsController; use SymfonyBundleFrameworkBundleTestWebTestCase; class ArticleControllerTest extends WebTestCase { public function testEmailIsQueued(): void { $client = static::createClient(); $client->request('GET', '/article'); $this->assertEmailIsQueued(0); } } ?>

Результат выполнения теста:

php bin/phpunit tests/Controller/ArticleControllerTest.php OK (1 test, 1 assertion)

Пример

Давайте проверим несколько писем сразу. Отправим два письма в одном запросе:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentMailerMailerInterface; use SymfonyComponentMimeEmail; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles', name: 'article_list')] public function list(MailerInterface $mailer): Response { $first = (new Email()) ->from('hello@example.com') ->to('user@example.com') ->subject('article 1') ->text('abcde'); $second = (new Email()) ->from('hello@example.com') ->to('user@example.com') ->subject('article 2') ->text('abcde'); $mailer->send($first); $mailer->send($second); return new Response('sent'); } } ?>

Теперь проверим каждое письмо по его индексу:

<?php namespace AppTestsController; use SymfonyBundleFrameworkBundleTestWebTestCase; class ArticleControllerTest extends WebTestCase { public function testEmailsAreQueued(): void { $client = static::createClient(); $client->request('GET', '/articles'); $this->assertEmailIsQueued(0); $this->assertEmailIsQueued(1); } } ?>

Результат выполнения теста:

php bin/phpunit tests/Controller/ArticleControllerTest.php OK (1 test, 2 assertions)

Смотрите также

  • метод assertEmailCount,
    который проверяет количество отправленных писем
  • метод assertQueuedEmailCount,
    который проверяет количество писем в очереди
  • метод assertEmailAddressContains,
    который проверяет адрес получателя письма
  • метод createClient,
    который создаёт клиент для выполнения запросов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить