我正在努力处理课程和邮件中的事件测试。在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']);
});
}
答案 0 :(得分:0)
您可以使用MailTrap之类的电子邮件捕获服务来帮助测试电子邮件。如果您将PHPUnit配置为使用MailTrap SMTP详细信息,则MailTrap可以捕获所有测试事件。
或者,您可以将邮件驱动程序设置为log
,这样它实际上就不会发送到电子邮件地址,而是捕获在Laravel日志文件中。
Laravel 5.2还支持pretend
配置。如果您将MAIL_PRETEND
文件中的.env
设置为true
,Laravel不会发送任何电子邮件。