Den*_*ebe 7 php unit-testing laravel laravel-5.3 laravel-5.4
我正在编写一个测试,确保我的应用程序的密码重置功能正常工作.密码重置系统是使用该php artisan make:auth
命令创建的.为了使测试通过我需要自动化的GET请求来/password/reset/{$token}
这里$token
是存储在值password_resets
表.Laravel像这样存储令牌:
$2y$10$9grKb3c6.Toiv0kjUWbCUeT8Q8D.Fg2gZ/xDLGQUAkmdyHigmRkNW
但是当Laravel将密码重置电子邮件发送给用户时,重置令牌在电子邮件中如下所示:
382aa64567ecd05a774c2e4ebb199d3340a1424300707053354c749c10487594
.
/password/reset/$2y$10$9grKb3c6.Toiv0kjUWbCUeT8Q8D.Fg2gZ/xDLGQUAkmdyHigmRkNW
由于重置令牌中的正斜杠,我的GET请求失败.(紧跟'g2gZ'之后)
我尝试使用辅助功能,decrypt()
但没有运气.
如何转换从password_resets
表中提取的密码重置令牌以匹配Laravel发送给用户的内容?
不确定这是否相关,但我确实将我的应用程序从5.3升级到5.4.
pin*_*eke 11
您可以从用于传递给Notification的assertSentTo方法的其他检查的闭包中获取令牌,因为它$token
是标准ResetPassword
通知的公共属性.
在你的测试中:
Notification::fake();
$this->postJson('api/user/reset', ['email' => $user->email])
->assertStatus(200);
$token = '';
Notification::assertSentTo(
$this->user,
\Illuminate\Auth\Notifications\ResetPassword::class,
function ($notification, $channels) use (&$token) {
$token = $notification->token;
return true;
});
$this->postJson('api/user/resetting', [
'email' => $user->email,
'token' => $token,
'password' => '87538753',
'password_confirmation' => '87538753'
])
->assertStatus(200);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4965 次 |
最近记录: |