Laravel で PHPUnit を使用してメール本文を確認する方法
Laravel では 通常Mail送信時のメール内容の確認が出来ません。
ただ文言の修正時に一々メールを送信して目で確認するのもとてもコストが掛かります。
そのためにメール本文を確認する方法を確認します。
確認環境
- PHP 7.4
- PHPUnit 9,5
- Laravel 6.2
メールの用意
メールの参考はこちらを使用。
ビューデータ - Laravel 6.x メール
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SampleMail extends Mailable
{
use Queueable, SerializesModels;
/**
* メッセージの生成
*
* @return $this
*/
public function build()
{
return $this->view('emails.sample_view')
->text('emails.sample_text');
}
}
|
サンプルのView
サンプルテキストのView
メール本文テスト
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
| <?php
namespace Tests\Unit\Mail;
use App\Mail\SampleMail;
use Illuminate\Support\HtmlString;
use ReflectionClass;
use Tests\TestCase;
use View;
class SampleMailTest extends TestCase
{
/**
* サンプルメール
*
* @test
* @return void
*/
public function testSampleMail()
{
// メール
$mail = new SampleMail();
$mail->build();
// View のみの場合レンダリングして確認
$render = $mail->render();
// ReflectionClassを使用してViewを生成する
$refrection = new ReflectionClass(get_class($mail));
$output = $refrection->getMethod('buildView');
$output->setAccessible(true);
$mailView = $output->invoke($mail);
// 変換用キー
$kyes = [
0 => 'html',
1 => 'text',
'html' => 'html',
'text' => 'text',
];
// メール内容を生成
$views = [];
if(is_array($mailView)){
foreach($mailView as $key => $view){
if($view instanceof HtmlString){
$views[$kyes[$key]] = $view->toHtml();
}elseif(is_string($view)){
$views[$kyes[$key]] = View::make($view, $mail->buildViewData())->render();
}
}
}else{
$views['html'] = View::make($mailView[0], $mail->buildViewData())->render();
}
// HTML
$this->assertEquals($view['html'], '<p>HTML</p>');
// TEXT
$this->assertEquals($view['text'], 'TEXT');
// 確認
// dd($views);
}
}
|
PHPUnit を実行
1
| vendor/bin/phpunit tests/Unit/Mails/MemberRegisterMailTest.php --env=dusk
|
PHPUnit の実行結果
1
2
3
4
5
6
7
| PHPUnit 9.5.0 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 00:16.955, Memory: 32.00 MB
OK (1 test, 2 assertions)
|
69行目のddの結果
1
2
3
4
| array:2 [
"html" => "<p>HTML</p>"
"text" => "TEXT"
]
|