Laravel Уведомление о подтверждении данных, переданных в почтовое сообщение. - PullRequest
2 голосов
/ 24 апреля 2020

Я работаю над проектом Laravel. Я пишу интеграционные / функциональные тесты для моего приложения. Сейчас я пишу тест, в котором мне нужно подтвердить данные, переданные в уведомление по электронной почте, и данные, переданные для его просмотра. Я нашел эту ссылку для этого, https://medium.com/@vivekdhumal / how-to-test-mail-notifications-in- laravel -345528917494 .

Это мой класс уведомлений

class NotifyAdminForHelpCenterCreated extends Notification
{
    use Queueable;

    private $helpCenter;

    public function __construct(HelpCenter $helpCenter)
    {
        $this->helpCenter = $helpCenter;
    }

    public function via($notifiable)
    {
        return ['mail'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage())
            ->subject("Help Center registration")
            ->markdown('mail.admin.helpcenter.created-admin', [
                'helpCenter' => $this->helpCenter,
                'user' => $notifiable
            ]);
    }
}

Как вы можете видеть из кода, я передаю данные в представление blade-mail mail.admin.helpcenter.created-admin.

Это мой метод тестирования.

/** @test */
public function myTest()
{
    $body = $this->requestBody();
    $this->actingAsSuperAdmin()
        ->post(route('admin.help-center.store'), $body)
        ->assertRedirect();

    $admin = User::where('email', $body['admin_email'])->first();
    $helpCenter = HelpCenter::first();

    Notification::assertSentTo(
        $admin,
        NotifyAdminForHelpCenterCreated::class,
        function ($notification, $channels) use ($admin, $helpCenter) {
            $mailData = $notification->toMail($admin)->toArray();
            //here I can do some assertions with the $mailData
            return true;
        }
    );
}

Как вы видите мой комментарий в тесте, я могу сделать некоторые утверждения с помощью переменной $ mailData. Но это не включает данные, передаваемые в представление. Как я могу утверждать или получать данные или переменные, передаваемые в представление / шаблон блейда?

1 Ответ

1 голос
/ 24 апреля 2020

Как вы можете видеть здесь , в классе MailMessage есть свойство viewData, которое содержит все данные, передаваемые представлению, нет необходимости превращать уведомление в массив.

$notification->toMail($admin)->viewData

Так было бы что-то вроде этого в вашем случае:

/** @test */
public function myTest()
{
    $body = $this->requestBody();
    $this->actingAsSuperAdmin()
        ->post(route('admin.help-center.store'), $body)
        ->assertRedirect();

    $admin = User::where('email', $body['admin_email'])->first();
    $helpCenter = HelpCenter::first();

    Notification::assertSentTo(
        $admin,
        NotifyAdminForHelpCenterCreated::class,
        function ($notification, $channels) use ($admin, $helpCenter) {
            $viewData = $notification->toMail($admin)->viewData;

            return $admin->is($viewData['user']) && $helpCenter->is($viewData['helpCenter']);
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...