No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creando un Job para la notificación de correo

27/34
Recursos

¿Cómo probar el background job que desarrollaste?

Probar adecuadamente tus jobs es crucial para asegurar la estabilidad de tus aplicaciones. En esta guía, te mostraremos cómo implementar pruebas para el background job que creaste previamente utilizando Sucker Punch. A través de estas pruebas podrás asegurarte de que los procesos asíncronos en tu aplicación se ejecuten correctamente. ¡Vamos a ello!

¿Qué es una prueba Double?

Las pruebas tipo Double son un concepto interesante que brinda flexibilidad para probar interacción entre componentes sin requerir que todo el sistema esté operativo. Estas permiten crear versiones simplificadas de objetos que se utilizan solo para los tests, facilitando verificar cómo interactúan ciertas partes del sistema.

Configuración de pruebas con Sucker Punch

Para comenzar, es necesario ajustar el archivo rails_helper. Aquí es donde se configura todo lo relativo a las pruebas en tu aplicación. En este archivo añadimos una línea clave para que cada proceso asíncrono se ejecute en el entorno de pruebas de manera síncrona, haciéndolo más manejable durante el testing.

# Añadir en rails_helper.rb
require 'sucker_punch/testing/inline'

Generación del archivo de pruebas

Luego de configurar tu entorno, es momento de generar el archivo de pruebas para el job que deseas testear:

rails generate rspec:job SendEmailJob

Este comando generará una estructura de carpetas y archivos dentro de tu proyecto que seguirán la estructura spec/jobs/tasks.

Implementación de Dobles en tus pruebas

Para probar que tu sistema de jobs no solo ejecuta tareas, sino que las ejecuta correctamente, el uso de Dobles es clave.

  • Class Double: Te permite observar métodos específicos dentro de una clase durante la ejecución.

  • Object Double: Crea una versión monitorizada de un objeto para verificar invocaciones de métodos.

A continuación, te mostramos un ejemplo de implementación:

describe SendEmailJob do
  let(:task_id) { 1 }
  let(:task_double) { class_double('Task').as_stub_const }
  let(:service_double) { double('SendEmailService') }
  
  it 'envía un email al ejecutar el job' do
    allow(task_double).to receive(:find).and_return(task_double)
    allow(service_double).to receive(:new).and_return(service_double)
    allow(service_double).to receive(:call)
    
    expect(task_double).to receive(:find).with(task_id)
    expect(service_double).to receive(:call)
    
    subject.perform_async(task_id)
  end
end

Prueba de ejecución

Finalmente, para correr las pruebas, utiliza el comando rspec en tu consola. Esto validará que los Dobles definidos están siendo llamados como se espera durante la ejecución del job:

rspec spec/jobs/send_email_job_spec.rb

Al aplicar estas estrategias, asegúrate de no sobreutilizar las pruebas tipo Dobles. Este método es relevante en situaciones donde los componentes ya han sido probados de manera aislada o cuando dependen de servicios externos que no están disponibles en el entorno de prueba.

Recuerda, las pruebas son un ciclo continuo en el desarrollo del software. Sigue explorando y practicando con otros tipos de pruebas para fortalecer tu aplicación. ¡Continúa tu aprendizaje y mejora tus habilidades de testing!

Aportes 1

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

EXCELENTE CURSO ME GUSTO MUCHO GRACIAS POR DARNOS ESTA OPORTUNIDAD DE APRENDER MAS Y MAS...