如何在Laravel 8中无键声明错误

问题描述

我正在为我的应用程序编写测试。

这是我的考试:

/** @test */
public function change_password_password_must_be_the_same()
{
    $old_password = 'password';
    $different_password = 'password1';
    $new_password = 'new password';

    $user = User::factory()->create([
        'password' => Hash::make($old_password)
    ]);

    $this->actingAs($user)
        ->patch("/profile/{$user->id}/change-password",[
            'password' => $different_password,'new_password' => $new_password,'confirm_new_password' => $new_password
        ])
        // How do I assert this?
        ->assertSessionHasErrors([
            'errors' => 'Password is incorrect.'
        ]);
}

如何不使用键来断言错误?就像我在要测试的代码中执行此操作时一样?

if (!Hash::check($password,$user->password)) {
    return redirect()
        ->route('users.edit',['user' => $user])
        ->withErrors('Password is incorrect');
}

解决方法

我终于找到了答案。是:

$errors = session('errors');
$messages = $errors->getBag('default')->getMessages();
$this->assertEquals('Password is incorrect.',$messages[0][0]);