在测试 Laravel 的邮件发送的时候,可以使用 tightenco/mailthief 这个 package :https://github.com/tightenco/mailthief
这是 Laravel 社区的一位大神写的,这是他的个人站点 https://adamwathan.me/
比如说,在用户注册的时候,我们通常会发送一封激活邮件,代码类似于下面这样:
Route::post('register', function () {
// 其他的代码逻辑
Mail::send('emails.activate', [], function ($message) {
$email = request('email');
$message->to($email),
$message->subject('激活你的账户');
$message->from('[email protected]');
});
// 其他代码
});
如果传统的测试对于这种应用场景来说是很难的,比如发送 HTTP 请求第三方的 API,怎么发送邮件等。但是,这在 tightenco/mailthief 中就可以比较完美地做到:
use MailThief\Facades\MailThief;
class RegistrationTest extends TestCase
{
/*@test*/
public function a_new_users_are_sent_a_welcome_email()
{
// 防止邮件真正发送出去,记得要有这个
MailThief::hijack();
$this->post('register', [
'name' => 'JellyBool',
'email' => '[email protected]',
'password' => 'laravist',
]);
// 保证邮件会发送到 [email protected]
$this->assertTrue(MailThief::hasMessageFor('[email protected]'));
// 确定邮件的标题是对的
$this->assertEquals('激活你的账户', MailThief::lastMessage()->subject);
}
}
很简单吧,读下来感觉自然而然就明白了。