Wai*_*ein 4 phpunit unit-testing laravel
我正在开发 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();
}
Run Code Online (Sandbox Code Playgroud)
但问题是,即使在我从浏览器注册时发送通知,也不会发送通知。我也喜欢检索验证链接并做一些事情。我怎样才能做到这一点?
不是一个完美的解决方案,但它确实有效,如果有人以某种方式破坏了这个功能,我会知道的。:)
首先覆盖保护方法verificationUri的的VerifyEmail通知,并予以公布
class EmailVerificationNotification extends VerifyEmail
{
public function verificationUrl($notifiable) {
return parent::verificationUrl($notifiable);
}
}
Run Code Online (Sandbox Code Playgroud)
然后用它来生成一个链接并对其进行断言..
/** @test */
public function an_user_can_verify_his_email_address()
{
$notification = new EmailVerificationNotification();
$user = factory(User::class)->create(['email_verified_at' => null]);
$uri = $notification->verificationUrl($user);
$this->assertSame(null, $user->email_verified_at);
$this->actingAs($user)->get($uri);
$this->assertNotNull($user->email_verified_at);
}
Run Code Online (Sandbox Code Playgroud)
只需运行以下命令,即可在VerifyEmail 通知之外轻松生成验证URL:
$verificationUrl = URL::temporarySignedRoute(
'verification.verify',
now()->addMinutes(60),
['id' => $user->id, 'hash' => sha1($user->email)]
);
Run Code Online (Sandbox Code Playgroud)
无需公开该verificationUrl()方法。
| 归档时间: |
|
| 查看次数: |
1767 次 |
| 最近记录: |