在Laravel 5.2中测试事件和邮件

问题描述 投票:1回答:1

我正在努力处理课堂和邮件中的事件测试。 Laravel 5.2中是否有Laravel 5.5+附带的替代品,Mail::fake()和类似产品?

这是一个示例测试类

<?php

namespace tests\SampleTest;

use tests\TestCase;
use App\Foo\Bar; 

class BarTest extends TestCase
{
    public function testBar() {
        $class = new Bar();
        $class->methodWithEvent();

        // Event is called. Inside event we call Mail
        $this->expectsEvents(App\Events\BarEvent::class);
    }
}

示例条类

<?php

namespace App\Foo;

use App\Events\BarEvent;
use Event;

class Bar 
{
    public function methodWithEvent() 
    {
        Event::fire(new BarEvent()); 
    }
}

示例事件文件 - 默认事件文件示例侦听器文件 - 处理程序方法

public function handle(BarEvent $event)
{ 
    $emailData = [
       'from' => '[email protected]', 
       'email' => '[email protected]',
       'title' => 'Test'
    ];

    Mail::send('Test Message', ['html' => 'HTML Message'], function ($mail) use ($emailData) {
        $mail->from($emailData['from']);
        $mail->to($emailData['email'])->subject($emailData['title']);
    }); 
}
php laravel laravel-5.2
1个回答
0
投票

您可以使用MailTrap等电子邮件捕获服务来帮助测试电子邮件。如果将PHPUnit配置为使用MailTrap SMTP详细信息,则MailTrap可以捕获所有测试事件。

或者,您可以将邮件驱动程序设置为log,以便它实际上不会发送到电子邮件地址,而是在Laravel日志文件中捕获。

Laravel 5.2还支持pretend配置。如果你将MAIL_PRETEND文件中的.env设置为true,Laravel不会发送任何电子邮件。

© www.soinside.com 2019 - 2024. All rights reserved.