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