从5.7版开始,Laravel建议在测试过程中使用array
驱动程序进行邮件处理:
不幸的是,the documentation对此驱动程序一无所知。根据{{3}},驱动程序将所有消息存储在内存中,而没有实际发送它们。在单元测试期间如何获取已存储的“已发送”消息(以便对其进行检查)?
答案 0 :(得分:2)
致电app()->make('swift.transport')->driver()->messages()
。返回值是Swift_Mime_SimpleMessage
个对象的集合。
完整的PHPUnit测试示例:
public function testEmail()
{
Mail::to('user@example.com')->send(new MyMail);
$emails = app()->make('swift.transport')->driver()->messages();
$this->assertCount(1, $emails);
$this->assertEquals(['user@example.com'], array_keys($emails[0]->getTo()));
}
答案 1 :(得分:1)
我基于Finesse的答案的自定义断言。
protected function assertMailSentTo($user, $expected = 1)
{
$messages = app('swift.transport')->messages();
$filtered = $messages->filter(function ($message) use ($user) {
return array_key_exists($user->email, $message->getTo());
});
$actual = $filtered->count();
$this->assertTrue(
$expected === $actual,
"Sent {$actual} messages instead of {$expected}."
);
}
答案 2 :(得分:1)
使用Laravel 7+或出现错误CREATE TABLE `simzsy`.`membership` (
`memberid` INT NOT NULL ,
`name` TEXT NOT NULL ,
`surname` TEXT NOT NULL ,
`dateofbirth` DATE NOT NULL ,
`id` LONGTEXT NOT NULL ,
`contact` LONGTEXT NOT NULL ,
`datejoined` DATE NOT NULL ,
`membertype` ENUM NOT NULL ,
PRIMARY KEY ( `memberid` )
) ENGINE = MYISAM
时,可使用此命令获取通过阵列驱动程序发送的电子邮件列表:
memberid