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.

Cómo probar que se envió un email desde una notificación?

¿Cuál es el secreto para probar si se envió un correo electrónico desde una notificación?

Prueba de la notificación:

it('does send notification when model is deleted', function() {
    Notification::fake();
    $this->model->delete();
    Notification::assertSentTo($this->model->user, MyModelDeletedNotification::class);
});

Pasa.

Prueba del correo electrónico:

it('does send email when model is deleted', function() {
    Mail::fake();
    $this->model->delete();
    Mail::assertQueued(MyModelDeletedMail::class, 1);
});

Falló. No hay correos electrónicos en cola.

Cuando se elimina un modelo, se activa un método del observador:

public function deleted(MyModel $model)
{
    if ($model->isForceDeleting()) {
        return;
    }

    $model->user->notify(new MyModelDeletedNotification($model));
}

Notificación:

class MyModelDeleted extends Notification implements ShouldQueue
{
    use Queueable;

    ...

    public function via($notifiable)
    {
        return ['mail', 'database'];
    }

    public function toMail($notifiable)
    {
        return (new MyModelDeletedMail($this->model))->to($notifiable->email);
    }

    ...
}

Correo electrónico:

class ConsultationDeleted extends Mailable
{
    use Queueable, SerializesModels;

    ...

    public function build()
    {
        ...
    }
}

Cuando hago un dump(“foobar”) dentro del constructor o en el método build de los correos electrónicos, el mensaje aparece en el registro. Sin embargo, la prueba falla. ¿Qué me falta aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para probar que se envió un Mailable desde una Notificación, debes agregar el método via a la clase de Notificación y especificar que se está utilizando el canal de correo. Esto se puede lograr modificando el método via de la siguiente manera:

    public function via($notifiable)
    {
        return ['mail'];
    }
    

    Al especificar que se utiliza el canal de correo, Laravel enviará automáticamente el correo electrónico cuando se active la notificación.

    Además, asegúrate de que el Mailable que se está probando sea la clase correcta y que importe y utilice el constructor y el método “build” correctos. Si el Mailable no se inicializa correctamente, la prueba podría fallar incluso si la Notificación envía correctamente el correo electrónico.

    Finalmente, si la prueba sigue fallando incluso después de configurar correctamente la Notificación y el Mailable, intenta ejecutar php artisan queue:listen en una ventana de terminal separada para asegurarte de que la cola esté procesando los trabajos correctamente. El Mailable puede estar en cola en lugar de enviarse inmediatamente, lo que provocaría el fallo de la prueba.

Comments are closed.