在Laravel 5.2中测试事件和邮件

时间:2019-02-19 08:40:06

标签: php laravel laravel-5.2

我正在努力处理课程和邮件中的事件测试。在Laravel 5.2中,是否可以替代Mail::fake()和类似版本的Laravel 5.5 +?

这是示例测试类

<?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' => 'test@hotmail.com', 
       'email' => 'joe.doe@hotmail.com',
       'title' => 'Test'
    ];

    Mail::send('Test Message', ['html' => 'HTML Message'], function ($mail) use ($emailData) {
        $mail->from($emailData['from']);
        $mail->to($emailData['email'])->subject($emailData['title']);
    }); 
}

1 个答案:

答案 0 :(得分:0)

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

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

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