Метод assertQueuedEmailCount
Метод assertQueuedEmailCount из класса
WebTestCase проверяет количество писем,
которые находятся в очереди на отправку. Первым
параметром передаётся ожидаемое число писем,
вторым - необязательное сообщение об ошибке.
Метод используется вместе с InMemoryTransport,
который перехватывает отправленные письма.
Синтаксис
assertQueuedEmailCount(int $count, string $message = '')
Пример
Давайте создадим контроллер, который ставит письмо в очередь на отправку:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(MailerInterface $mailer): Response
{
$email = (new Email())
->from('user@example.com')
->to('article@example.com')
->subject('hello')
->text('abcde');
$mailer->send($email);
return new Response('hello');
}
}
?>
Давайте напишем тест, который проверяет, что в очереди находится одно письмо:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertResponseIsSuccessful();
$this->assertQueuedEmailCount(1);
}
}
?>
Результат выполнения теста:
php bin/phpunit tests/Controller/ArticleControllerTest.php
OK (1 test, 2 assertions)
Пример
Давайте поставим в очередь два письма и проверим их количество:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(MailerInterface $mailer): Response
{
$email1 = (new Email())
->from('user@example.com')
->to('article1@example.com')
->subject('hello')
->text('abcde');
$email2 = (new Email())
->from('user@example.com')
->to('article2@example.com')
->subject('hello')
->text('abcde');
$mailer->send($email1);
$mailer->send($email2);
return new Response('hello');
}
}
?>
Давайте проверим, что в очереди ровно два письма:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertResponseIsSuccessful();
$this->assertQueuedEmailCount(2);
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Пример
Давайте проверим, что писем в очереди нет:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class ArticleControllerTest extends WebTestCase
{
public function testIndex(): void
{
$client = static::createClient();
$client->request('GET', '/');
$this->assertQueuedEmailCount(0);
}
}
?>
Результат выполнения теста:
OK (1 test, 1 assertion)
Смотрите также
-
метод
assertEmailCount,
который проверяет общее количество писем -
метод
assertEmailIsQueued,
который проверяет, что письмо попало в очередь -
класс
InMemoryTransport,
который перехватывает отправленные письма -
класс
WebTestCase,
который предоставляет методы для тестирования