Acciones de Controlador y Pruebas en Ruby on Rails

Clase 31 de 34Curso Intermedio de Ruby on Rails

Resumen

¿Cómo crear una nueva acción de controlador en Rails?

En el desarrollo de aplicaciones Rails, la creación de acciones de controlador que interactúan con Service Objects es clave para mantener organizada la lógica del negocio. Aquí explicaremos cómo crear una nueva acción de controlador para gestionar los estados de una tarea, garantizando además su correcto funcionamiento mediante pruebas.

¿Cómo agregar una nueva acción al controlador?

  1. Localizar y editar el controlador de tareas:

    • Abre el archivo del controlador de tareas y busca un lugar adecuado para adicionar la nueva acción.
  2. Definir la acción y su estructura:

    • Agrega la función def trigger dentro del controlador. Esta acción recibirá un parámetro que permitirá actualizar el estado de una tarea específica.
    def trigger
      # Aquí se instancia el servicio para modificar el estado de la tarea
    end
    
  3. Modificar el before_action:

    • Es necesario incluir la acción trigger en el before_action para configurar el evento justo antes de ejecutar esta acción.
before_action :set_task, only: [:show, :edit, :update, :destroy, :trigger]

¿Cómo definir las rutas para la nueva acción?

  1. Añadir la nueva ruta:
    • Dentro de config/routes.rb, agrega la nueva ruta usando el verbo HTTP patch, que es apropiado para editar recursos existentes.
resources :tasks do
  member do
    patch :trigger
  end
end
  1. Verificar las rutas creadas:
    • Utiliza la consola de comandos con rails routes para confirmar que la ruta se ha integrado correctamente.

¿Cómo escribir pruebas para garantizar el funcionamiento?

  1. Preparar el entorno de prueba:

    • Accede al archivo de pruebas de petición en la carpeta spec/requests.
  2. Definir la prueba:

    • Añade un nuevo bloque describe y dentro de este, la prueba para la acción trigger. Esto asegura que el estado de la tarea se actualice correctamente.
describe "PATCH /tasks/:id/trigger" do
  it "updates the task state" do
    task = create(:task)
    patch trigger_task_path(task), params: { event: 'start' }
    task.reload
    expect(task.state).to eq('inprocess')
  end
end

¿Cómo manejar el acceso con CanCan?

  1. Asegurar autorizaciones:
    • Confirma que el usuario autentificado es el propietario de la tarea, dado que CanCan evalúa los permisos basados en la propiedad de la tarea.
# En el contexto de definición del propietario de la tarea
let(:user) { create(:user) }
let(:task) { create(:task, owner: user) }
  1. Ejecutar las pruebas:
    • Corre las pruebas con rspec para verificar que el sistema reconozca las autorizaciones y la funcionalidad esté intacta.

Crear una nueva acción de controlador que interactúa con un Service Object optimiza el manejo de estados en una aplicación Rails. Además, el establecimiento de pruebas contundentes garantiza la fiabilidad de su implementación. Considera extender las pruebas a casos negativos para asegurar una robustez aún mayor. ¿Listo para ello? ¡Adelante, marco a marco, tu proyecto crecerá!