我正在开发一个Laravel应用程序。我正在对我的应用程序进行单元测试。现在我在测试验证过程中遇到了麻烦。
我现在要做的是注册一个用户,然后测试验证邮件是否发送,然后我将获得该注册的验证链接,然后我将对该链接做一些事情。
1.第一个问题是电子邮件没有发送。
1.第二个问题是,我不知道如何检索验证电子邮件链接?
这是我的考验
public function test_user_can_be_verified_and_redirected_based_on_role()
{
Notification::fake();
$user = $this->registerUser();
Notification::assertSentTo($user, SendEmailVerificationNotification::class);
}
protected function registerUser()
{
$user = factory(User::class)->make();
$this->post(route('register'), [
'name' => $user->name,
'email' => $user->email,
'password' => 'testing',
'password_confirmation' => 'testing',
])->assertRedirect();
return User::whereEmail($user->email)->first();
}
字符串
但问题是,即使我从浏览器注册时发送通知,也不会发送通知。我也喜欢检索验证链接并做一些事情。如何才能做到这一点?
4条答案
按热度按时间8hhllhi21#
不是一个完美的解决方案,但它确实有用,如果有人以某种方式破坏了这个功能,我会知道的。
首先覆盖
VerifyEmail
通知的受保护方法verificationUri
并将其公开字符串
然后使用它来生成一个链接并对其进行Assert。
型
zy1mlcev2#
只需运行以下命令,即可在VerifyEmail通知之外轻松生成验证URL:
字符串
无需将
verificationUrl()
方法设为public。jyztefdp3#
以下是我的解决方案:
字符串
e0bqpujr4#
@florent的回答很好,但是对于Laravel 5.7.29,我发现使用工厂创建的新用户自动设置了email_verified_at标志,因此第一个测试-用户尚未验证-失败。
通过添加数组将
email_verified_at
设置为null
,可以观察到正确的操作:字符串