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

Класс Mail

Класс Mail в Laravel предоставляет удобный способ тестирования отправки писем. Основная задача этого класса - подменить реальный почтовый драйвер на фиктивный и предоставить методы для проверки, что письма были отправлены с правильными параметрами. Для использования класса необходимо импортировать фасад Mail через пространство имён IlluminateSupportFacadesMail.

Класс Mail содержит следующие основные методы: fake - для подмены реальной отправки писем, assertSent - для проверки, что письмо было отправлено, assertNotSent - для проверки, что письмо не было отправлено, и assertSentTo - для проверки получателя письма.

Синтаксис

<?php Mail::fake(); Mail::assertSent($mailableClass); Mail::assertNotSent($mailableClass); Mail::assertSentTo($recipient, $mailableClass); ?>

Пример

Давайте создадим тест для проверки отправки письма после регистрации пользователя:

<?php namespace TestsFeature; use TestsTestCase; use AppModelsUser; use AppMailWelcomeMail; use IlluminateSupportFacadesMail; class RegistrationTest extends TestCase { public function test_welcome_email_is_sent() { Mail::fake(); $user = User::factory()->create([ 'email' => 'user@example.com', ]); Mail::to($user->email)->send(new WelcomeMail($user)); Mail::assertSent(WelcomeMail::class); } } ?>

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

"Test passed successfully"

Пример

Давайте проверим, что письмо было отправлено конкретному пользователю:

<?php namespace TestsFeature; use TestsTestCase; use AppModelsUser; use AppMailWelcomeMail; use IlluminateSupportFacadesMail; class RegistrationTest extends TestCase { public function test_email_sent_to_correct_user() { Mail::fake(); $user = User::factory()->create([ 'email' => 'user@example.com', ]); Mail::to($user->email)->send(new WelcomeMail($user)); Mail::assertSentTo($user, WelcomeMail::class); } } ?>

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

"Test passed successfully"

Пример

Давайте проверим, что письмо с уведомлением о смене пароля не было отправлено:

<?php namespace TestsFeature; use TestsTestCase; use AppMailPasswordChangedMail; use IlluminateSupportFacadesMail; class PasswordTest extends TestCase { public function test_password_change_email_not_sent() { Mail::fake(); // Выполняем действие, которое НЕ должно отправить письмо $res = $this->post('/api/update-profile', [ 'name' => 'John Doe', ]); Mail::assertNotSent(PasswordChangedMail::class); } } ?>

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

"Test passed successfully"

Пример

Давайте проверим содержимое отправленного письма с помощью замыкания:

<?php namespace TestsFeature; use TestsTestCase; use AppModelsUser; use AppMailWelcomeMail; use IlluminateSupportFacadesMail; class RegistrationTest extends TestCase { public function test_welcome_email_has_correct_content() { Mail::fake(); $user = User::factory()->create([ 'email' => 'user@example.com', 'name' => 'John Doe', ]); Mail::to($user->email)->send(new WelcomeMail($user)); Mail::assertSent(WelcomeMail::class, function ($mail) use ($user) { return $mail->hasTo($user->email) && $mail->greeting === 'Welcome John Doe'; }); } } ?>

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

"Test passed successfully"

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

  • метод fake,
    который подменяет реальную отправку писем
  • метод assertSent,
    который проверяет, что письмо было отправлено
  • класс Notification,
    который используется для тестирования уведомлений
  • класс Queue,
    который используется для тестирования очередей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить