gpt4 book ai didi

laravel - 如何为 Laravel 更新密码表单编写测试?

转载 作者:行者123 更新时间:2023-12-04 02:59:38 25 4
gpt4 key购买 nike

如何为 Laravel 更新密码表单编写 phpunit 测试?

这是我的测试:

$user = \factory(\App\User::class)->create(['password' => \Hash::make('password')]);
$this->actingAs($user);

$response = $this->call('PUT', '/user/update-password', array(
'_token' => csrf_token(),
'current_password' => 'password',
'new_password' => 'newone',
'repeat_new_password' => 'newone',
));
$response->assertStatus(302);

$this->assertDatabaseHas('users', ['name' => $user->name, 'password' => \Hash::make('newone')]);

密码 Controller 正在像这样保存新密码:
....
$user->password = \Hash::make($request->new_password);
$user->save();
....

我收到错误消息:“断言表 [users] 中的一行与属性匹配失败”

更新密码表单工作正常,因为我可以使用更新的密码登录。我猜,那是: $this->assertDatabaseHas('users', ['name' => $user->name, 'password' =>\Hash::make('newone')]);正在制作与我的密码 Controller 不同的密码。

任何想法,这里有什么问题?

最佳答案

正如@Latheeesan 建议的 Hash:make() 产生不同的结果......

因此对它使用 Hash::check(...,如下例所示:

$oldPassword = 'password';
$newPassword = 'newone';

$user = \factory(\App\User::class)->create(['password' => \Hash::make($oldPassword)]);

$this->actingAs($user);

$response = $this->call('PUT', '/user/update-password', array(
'_token' => csrf_token(),
'current_password' => $oldPassword,
'new_password' => $newPassword,
'repeat_new_password' => $newPassword,
));
$response->assertStatus(302);
$this->assertTrue(\Hash::check($newPassword,$user->password));

这应该使您的测试正常...

关于laravel - 如何为 Laravel 更新密码表单编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com