Acciones de Controlador y Pruebas en Ruby on Rails
Clase 31 de 34 • Curso 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?
-
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.
-
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
- Agrega la función
-
Modificar el
before_action
:- Es necesario incluir la acción
trigger
en elbefore_action
para configurar el evento justo antes de ejecutar esta acción.
- Es necesario incluir la acción
before_action :set_task, only: [:show, :edit, :update, :destroy, :trigger]
¿Cómo definir las rutas para la nueva acción?
- Añadir la nueva ruta:
- Dentro de
config/routes.rb
, agrega la nueva ruta usando el verbo HTTPpatch
, que es apropiado para editar recursos existentes.
- Dentro de
resources :tasks do
member do
patch :trigger
end
end
- Verificar las rutas creadas:
- Utiliza la consola de comandos con
rails routes
para confirmar que la ruta se ha integrado correctamente.
- Utiliza la consola de comandos con
¿Cómo escribir pruebas para garantizar el funcionamiento?
-
Preparar el entorno de prueba:
- Accede al archivo de pruebas de petición en la carpeta
spec/requests
.
- Accede al archivo de pruebas de petición en la carpeta
-
Definir la prueba:
- Añade un nuevo bloque
describe
y dentro de este, la prueba para la accióntrigger
. Esto asegura que el estado de la tarea se actualice correctamente.
- Añade un nuevo bloque
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?
- 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) }
- Ejecutar las pruebas:
- Corre las pruebas con
rspec
para verificar que el sistema reconozca las autorizaciones y la funcionalidad esté intacta.
- Corre las pruebas con
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á!