Метод assertEmailCount
Метод assertEmailCount проверяет, сколько писем было отправлено во время выполнения теста. Первым параметром передаётся ожидаемое количество писем. Вторым параметром можно передать сообщение об ошибке, которое будет выведено при несовпадении количества. Метод доступен внутри классов, наследующих WebTestCase, так как использует встроенный почтовый перехватчик Symfony.
Синтаксис
assertEmailCount(int $expectedCount, string $message = '')
Пример
Давайте проверим, что контроллер отправляет ровно одно письмо при регистрации пользователя:
<?php
namespace App\Tests\Controller;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class UserControllerTest extends WebTestCase
{
public function testRegisterSendsOneEmail(): void
{
$client = static::createClient();
$client->request('POST', '/register', [
'email' => 'user@example.com',
]);
$this->assertEmailCount(1);
}
}
?>
Если контроллер отправил одно письмо, тест пройдёт успешно. Если писем ноль или больше одного, тест завершится с ошибкой.
Пример
Давайте проверим, что письмо не отправлялось, и передадим своё сообщение об ошибке:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class UserControllerTest extends WebTestCase
{
public function testRegisterDoesNotSendEmail(): void
{
$client = static::createClient();
$client->request('POST', '/register', [
'email' => 'invalid',
]);
$this->assertEmailCount(0, 'No email should be sent for invalid data');
}
}
?>
Если при невалидных данных письмо всё же было отправлено, тест выведет сообщение 'No email should be sent for invalid data'.
Пример
Давайте проверим, что при массовой рассылке отправляется три письма:
<?php
namespace App\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class NewsletterControllerTest extends WebTestCase
{
public function testNewsletterSendsThreeEmails(): void
{
$client = static::createClient();
$client->request('POST', '/newsletter/send', [
'emails' => ['a@example.com', 'b@example.com', 'c@example.com'],
]);
$this->assertEmailCount(3);
}
}
?>
Если контроллер отправил три письма, тест пройдёт успешно. Это удобно использовать вместе с методом assertEmailAddressContains для проверки получателей.
Смотрите также
-
метод
assertEmailIsQueued,
который проверяет, что письмо попало в очередь -
метод
assertQueuedEmailCount,
который проверяет количество писем в очереди -
метод
assertEmailAddressContains,
который проверяет адрес получателя письма -
класс
InMemoryTransport,
который перехватывает отправленные письма в тестах