Тестування вмісту повідомлень в Laravel 8


Тестування вмісту повідомлень в Laravel 8

Laravel 8.18.0 додав методи тестування HTML-повідомлень та текстів електронної пошти на наявність доступності. Ці методи задокументовані, але хотілося б проглянути простий приклад, щоб продемонструвати, наскільки вони можуть бути корисними.

Документація демонструє такі методи, які ви можете використовувати для тестування доступності:

public function test_mailable_content()
{
    $user = User::factory()->create();

    $mailable = new InvoicePaid($user);

    $mailable->assertSeeInHtml($user->email);
    $mailable->assertSeeInHtml('Invoice Paid');

    $mailable->assertSeeInText($user->email);
    $mailable->assertSeeInText('Invoice Paid');
}

Як бачите, доступні екземпляри зручно надають методи твердження, за допомогою яких електронні листи містять очікуваний вміст. Давайте розглянемо простий приклад, який може допомогти зміцнити цю концепцію.

Починаємо

Скажімо, ви створюєте просту електронну пошту, яка надсилає код підтвердження на електронну пошту користувача, щоб щось підтвердити, перш ніж йому буде дозволено щось робити. Ми надішлемо HTML-версію, але ви можете протестувати текстові версії електронної пошти та звернутися до наведених вище прикладів для текстових повідомлень.

Почнемо з нового проекту Laravel із використанням документально підтвердженого методу встановлення Laravel для Saravel Sail:

# I use ~/code/sandbox as path for playground projects
cd ~/code/sandbox
curl -s https://laravel.build/mailable-demo | bas

Після створення проекту ви можете запустити сервер додатків Laravel:

vendor/bin/sail up -d

Створення правила для надсилання повідомлення

Ми готові створити доступний для тестування додаток, а також додати шаблон.  Для створення класу та створення шаблону в нашому проєкті ми використаємо консоль artisan:

sail artisan make:mail ConfirmationCode # Create the template mkdir -p resources/views/emails echo 'Hello from HTML!' \ > resources/views/emails/confirmation-code.blade.php

Далі оновимо клас ConfirmationCode, це виглядає наступним чином: 

<?php

namespace App\Mail;

use App\Models\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class ConfirmationCode extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * @var string
     */
    public $code;

    /**
     * @var \App\Models\User
     */
    public $user;

    /**
     * Create a new message instance.
     *
     * @param string $code
     */
    public function __construct(User $user, string $code)
    {
        $this->user = $user;
        $this->code = $code;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.confirmation-code');
    }
}

Ми будемо використовувати просту string $code властивість для повідомлень, але, можливо, реальна реалізація може використовувати службу, відповідальну за генерацію випадкових кодів, прив'язаних до певного користувача.

Далі, давайте використаємо файл провайдера tests/Feature/ExampleTest.php для перевірки нашої повідомлення:

<?php

namespace Tests\Feature;

use App\Mail\ConfirmationCode;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    use RefreshDatabase;

    /**
     * A basic test example.
     *
     * @return void
     */
    public function testBasicTest()
    {
        $user = User::factory()->create();
        $subject = new ConfirmationCode($user, '1234');

        $subject->assertSeeInHtml('Hello from HTML!');
    }
}

На цьому етапі наш тест повинен пройти:

vendor/bin/sail test tests/Feature

   PASS  Tests\Feature\ExampleTest
  ✓ basic test

  Tests:  1 passed
  Time:   1.06s

 Далі налаштуємо тест, щоб отримати код підтвердження:

public function testBasicTest()
{
    $user = User::factory()->create();
    $subject = new ConfirmationCode($user, '1234');

$subject->assertSeeInHtml('Hello ' . $user->name);
$subject->assertSeeInHtml('Here is your confirmation code: <strong>1234</strong>');
}

Тест зараз не пройде, якщо ви повторите його. Далі, давайте оновимо шаблон, включаючи ім’я користувача та код підтвердження:

{{-- resources/emails/confirmation-code.blade.php --}}
Hello {{ $user->name }}

Here is your confirmation code: <strong>{{ $code }}</strong>

На цьому етапі ваш тест пройде, і ви зможете переконатися, що у вашому доступному коді є необхідний код підтвердження!

У реальному додатку ви, швидше за все, згенеруєте електронний код із сервісу та обміняєте його фальшивим або частковим знущанням, але ви бачите, як ми можемо забезпечити, щоб доступний шаблон містив очікуваний текст. Зручно, що тепер ви можете протестувати свої доступні файли без додаткової роботи та безпосередньо пакетів! Не забудьте ознайомитися з офіційною документацією Laravel Mail, щоб дізнатись більше про доступність.

Джерело