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

Метод fake

Метод fake класса Mail применяется в тестах для перехвата всех отправляемых писем и предотвращения их реальной отправки. Вместо отправки через почтовый драйвер, письма сохраняются в памяти, что позволяет выполнять проверки с помощью метода assertSent. Метод не принимает параметров и возвращает экземпляр фасада Mail.

Синтаксис

<?php Mail::fake(); ?>

Пример 1

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Mail; use App\Mail\WelcomeMail; use App\Models\User; class RegistrationTest extends TestCase { public function test_welcome_email_is_sent_after_registration() { Mail::fake(); $response = $this->post('/register', [ 'email' => 'john@example.com', 'password' => 'secret123', 'name' => 'John Doe' ]); Mail::assertSent(WelcomeMail::class); $user = User::where('email', 'john@example.com')->first(); $this->assertNotNull($user); } } ?>

Пример 2

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Mail; use App\Mail\OrderConfirmation; use App\Models\Order; use App\Models\User; class OrderTest extends TestCase { public function test_order_confirmation_email_has_correct_data() { Mail::fake(); $user = User::factory()->create(); $order = Order::factory()->create([ 'user_id' => $user->id, 'total' => 99.99 ]); $response = $this->actingAs($user) ->post('/orders/' . $order->id . '/confirm'); Mail::assertSent(OrderConfirmation::class, function ($mail) use ($order) { return $mail->order->id === $order->id && $mail->hasTo('john@example.com'); }); } } ?>

Пример 3

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

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Support\Facades\Mail; use App\Mail\OrderConfirmation; use App\Models\Order; use App\Models\User; class OrderTest extends TestCase { public function test_email_not_sent_for_invalid_order() { Mail::fake(); $user = User::factory()->create(); $order = Order::factory()->create([ 'user_id' => $user->id, 'status' => 'pending' ]); $response = $this->actingAs($user) ->post('/orders/' . $order->id . '/cancel'); Mail::assertNotSent(OrderConfirmation::class); } } ?>

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

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