Laravel 8에서 메일 및 데이터베이스 알림을 테스트하는 방법
6175 단어 tddphpnotificationslaravel
If you are reading this, I will assume that you already know how to write unit tests in Laravel using PHPUnit. If you don't , you can click to get you started.
먼저 이 Laravel 명령을 사용하여 알림을 생성합니다.
php artisan make:notification TestNotification
파일은 다음과 같아야 합니다.
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class TestNotification extends Notification
{
use Queueable;
private $user;
public function __construct($user)
{
$this->$user = $user;
}
public function via($notifiable)
{
return ['mail','database'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
public function toArray($notifiable)
{
return [
'some' => 'data'
];
}
}
그런 다음 테스트에서 알림 파사드를 호출한 다음 정적 함수 fake()를 호출하여 알림을 속여야 합니다.
데이터베이스 알림을 테스트할 것입니다. 테스트 파일에서 testDatabaseNotification() 함수를 만듭니다. 그런 다음 테스트 케이스를 준비하고 행동하고 주장합니다.
public function testDatabaseNotification()
{
// Arrange
Notification::fake();
$this->user = User::factory()->create();
$email_subject = "Test Notification";
// Act
$this->user->notify(new TestNotification($email_subject));
// Assert
Notification::assertSentTo($this->user, TestNotification::class, function ($notification, $channels) use($email_subject){
$this->assertContains('database', $channels);
$databaseNotification = (object)$notification->toArray($this->user);
$this->assertEquals( $email_subject, $databaseNotification->title);
return true;
});
}
이제 메일 알림을 테스트하겠습니다.
public function testMailNotification()
{
// Arrange
Notification::fake();
$this->user = User::factory()->create();
$email_subject = "Test notification";
// Act
$this->user->notify(new TestNotification($email_subject));
// Assert
Notification::assertSentTo($this->user, TestNotification::class, function ($notification, $channels) use($email_subject){
$this->assertContains('mail', $channels);
$mailNotification = (object)$notification->toMail($this->user);
$this->assertEquals($email_subject, $mailNotification->subject,);
$this->assertEquals('The introduction to the notification.', $mailNotification->introLines[0]);
$this->assertEquals('Thank you for using our application!', $mailNotification->outroLines[0]);
$this->assertEquals('Notification Action', $mailNotification->actionText);
$this->assertEquals($mailNotification->actionUrl, url('/'));
return true;
});
}
여기에서 메일 알림의 내용을 검색하고 있음을 알 수 있습니다.
전체 코드는 다음과 같습니다.
<?php
namespace Tests\Unit;
use App\Notifications\TestNotification;
use Illuminate\Support\Facades\Notification;
use App\Model\User;
use Tests\TestCase;
class MailNotificationTest extends TestCase
{
/**
* @var \Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model|mixed
*/
private $user;
/**
* A basic test example.
*
* @return void
*/
public function testDatabaseNotification()
{
Notification::fake();
$this->user = User::factory()->create();
$email_subject = "Test Notification";
$this->user->notify(new TestNotification($email_subject));
Notification::assertSentTo($this->user, TestNotification::class, function ($notification, $channels) use($email_subject){
$this->assertContains('database', $channels);
$databaseNotification = (object)$notification->toArray($this->user);
$this->assertEquals( $email_subject, $databaseNotification->title);
return true;
});
}
public function testMailNotification()
{
Notification::fake();
$this->user = User::factory()->create();
$email_subject = "Test notification";
$this->user->notify(new TestNotification($email_subject));
Notification::assertSentTo($this->user, TestNotification::class, function ($notification, $channels) use($email_subject){
$this->assertContains('mail', $channels);
$mailNotification = (object)$notification->toMail($this->user);
$this->assertEquals($email_subject, $mailNotification->subject,);
$this->assertEquals('The introduction to the notification.', $mailNotification->introLines[0]);
$this->assertEquals('Thank you for using our application!', $mailNotification->outroLines[0]);
$this->assertEquals('Notification Action', $mailNotification->actionText);
$this->assertEquals($mailNotification->actionUrl, url('/'));
return true;
});
}
}
이제 Laravel 알림에서 메일 및 데이터베이스 콘텐츠를 성공적으로 어설션했습니다.
이에 대해 어떻게 생각하는지 아래 댓글에 공유해 주세요.
행복한 코딩 :)
Reference
이 문제에 관하여(Laravel 8에서 메일 및 데이터베이스 알림을 테스트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/macelux/how-to-test-mail-and-database-notifications-in-laravel-8-178o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)