我正在开发Laravel应用程序。我正在对我的应用程序进行单元测试。现在,我在测试验证过程时遇到了麻烦。
我现在想要做的是注册一个用户,然后测试是否发送了验证电子邮件,然后我将获得该注册的验证链接,然后使用该链接进行操作。
这是我的考验
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();
}
但是问题是即使我从浏览器注册时也不会发送通知。我还喜欢检索验证链接并执行某些操作。我该怎么办?
答案 0 :(得分:0)
这不是一个完美的解决方案,但是可以解决问题,如果有人以某种方式破坏了此功能,我会知道的。 :)
首先覆盖 var calculateTotal = function(type) {
var sum = 0;
data.allItems[type].forEach(function(cur) {
sum += cur.value;
})
data.totals[type] = sum;
}
通知的受保护方法verificationUri
并将其公开
VerifyEmail
然后使用它来生成链接并对其进行断言。.
class EmailVerificationNotification extends VerifyEmail
{
public function verificationUrl($notifiable) {
return parent::verificationUrl($notifiable);
}
}
答案 1 :(得分:0)
只需运行:
$verificationUrl = URL::temporarySignedRoute(
'verification.verify',
now()->addMinutes(60),
['id' => $user->id, 'hash' => sha1($user->email)]
);
无需公开 verificationUrl()
方法。