es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pruebas de Laravel Livewire

Estoy deseando aprender Livewire y también sus pruebas. Ahora he creado un componente para registrar usuarios y funciona bien, pero cuando intento hacer una prueba, obtengo este error:

“Error al afirmar que un array tiene la clave ‘redirect’.”

Aquí están las partes del código:

Prueba de registro

class RegisterTest extends TestCase
{
    use RefreshDatabase;

/** @test */
public function can_register()
{
    Livewire::test('auth.register')
    ->set('name', 'user')
    ->set('email', 'user@outlook.com')
    ->set('password', 'secret')
    ->set('password_confirmation', 'secret')
    ->call('register')
    ->assertRedirect('/');
}
 }

Componente

public $name = '';
public $email = '';
public $password = '';
public $password_confirmation = '';

public function register()
{
    $data = $this->validate([
        'name' => 'required|string',
        'email' => 'required|email',
        'password' => 'required|confirmed|min:8|string'
    ]);

    User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

    return redirect('/');
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la afirmación assertRedirect('/') falló porque el valor devuelto por el componente Livewire no contiene una clave redirect. Esto significa que el método register en el componente no devolvió una respuesta de redireccionamiento.

    Para solucionarlo, debes modificar el método register para que devuelva explícitamente una respuesta de redireccionamiento después de crear el usuario:

    use Illuminate\Http\RedirectResponse;
    
    // ...
    
    public function register(): RedirectResponse
    {
        $data = $this->validate([
            'name' => 'required|string',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:8|string'
        ]);
    
        User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    
        return redirect('/');
    }
    

    Al agregar la pista de tipo : RedirectResponse a la definición del método, puedes asegurar que se devuelve el tipo de respuesta correcto. Con este cambio, la prueba de Livewire debería pasar como se espera.

Comments are closed.