无法通过Laravel脚手架登录测试。
我试着用$user = User::first();访问数据库User::factory()->create();,也使用工厂User::factory()->create();。在这两种情况下,我都能够成功地获得dd($user)信息,因此这意味着$user存在并可以被访问。
我还尝试用bcrpyt()和Hash::make密码硬编码凭据--在那里,错误似乎也会发生。
我不是在利用RefreshDatabase的特质。
public function test_log_user()
{
$this->withoutExceptionHandling();
// $user = User::first();
$user = User::factory()->create();
// dd($user);
$response = $this->post('/login', [
'email' => $user->email,
'password' => $user->password, //line 47
]);
$response->getStatusCode();
// $response->dumpHeaders();
// $response->dump();
$response->assertStatus(302);
}获取此错误:
说明\ValidationException:给定数据无效。C:\xampp\htdocs\react\React-Laravel\vinos-gdl\tests\Feature\AuthTest.php:47
我已经清除了缓存,路由,配置。
phpunit.xml:
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<!-- <server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/> -->
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>我还有一个正确传递的test_create_user
public function test_create_user()
{
$this->withoutExceptionHandling();
$user = [
'name' => Factory::create()->name(),
'email' => Factory::create()->email(),
];
$response = $this->post('/register', [
'name' => $user['name'],
'email' => $user['email'],
'password' => Hash::make('123456'),
'password_confirmation' => Hash::make('123456')
]);
// $response->dumpHeaders();
// $response->dump();
$response->assertStatus(302);
}发布于 2021-01-24 00:13:09
您的test_log_user()函数使用user的已散列密码作为表单密码,然后在对照数据库中的值进行检查之前再次对其进行散列。
user factory将用户的密码字段设置为单词password的散列(除非您已更改此字段)。例如:
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}所以在您的test_log_user()函数中:
$user = User::factory()->create();在数据库中创建一个新的user,$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi作为密码字段中的值(单词password的散列)。
所以$user->password的值不是password,而是$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi。
您要做的是将明文密码传递给:
$response = $this->post('/login', [
'email' => $user->email,
'password' => 'password'
]);https://stackoverflow.com/questions/65864249
复制相似问题