¿Cómo añadir pruebas de modelo al método save de un modelo?
Añadir pruebas de modelo adecuadas es esencial para garantizar la validez de nuestra aplicación. Aquí nos enfocaremos en el método de instancia save del modelo task, asegurándonos de que los datos ingresados cumplan con las validaciones impuestas por el modelo. Este proceso también nos ayudará a verificar que las tareas creadas a partir de cero sean válidas.
¿Cómo estructurar el contexto para las pruebas?
Para iniciar, es recomendable utilizar el método context para separar el bloque de código que contiene la configuración anterior de las pruebas. Esto no solo mejora la legibilidad sino que también aísla las pruebas permitiendo cambios sin afectar otros bloques de código. Podemos identificar contextos como:
Con parámetros desde FactoryBot: Esto implica que estamos reutilizando las configuraciones existentes de nuestras fábricas para realizar las pruebas.
Con parámetros desde cero: Se enfoca en crear una tarea completamente desde cero, configurando todos los campos necesarios manualmente.
¿Qué campos necesitamos para crear una task desde cero?
Al crear una task, es crucial conocer las validaciones impuestas por el modelo. Los campos básicos requeridos son:
name: El nombre de la tarea.
description: Una descripción breve.
due_date: Fecha de vencimiento que debe estar en el futuro para ser válida.
code: Autogenerado al guardar la tarea.
Relación con category: Categoría de la tarea.
Relación con owner: Propietario de la tarea.
Al menos un participant: Participante de la tarea.
Código de ejemplo para configurar los parámetros básicos:
Una vez configurados todos los parámetros necesarios, es fundamental crear pruebas que verifiquen si la tarea es válida. Utilizar el método valid? dentro de un lenguaje de pruebas es eficiente para estos casos.
Para definir la prueba:
it 'is expected to be valid'do expect(task).to be_valid
end
Mediante el uso de be_valid, evaluamos si nuestro objeto task cumple con todas las validaciones definidas en el modelo.
¿Cómo ejecutar las pruebas y verificar los resultados?
Para ejecutar todas las pruebas definidas, se usa el comando rspec. Una vez lanzado, podrás ver si las pruebas pasan y cumplen con las expectativas definidas.
rspec
Si las pruebas fueron exitosamente ejecutadas con resultados positivos, significa que nuestra configuración es correcta y reflejamos los requisitos del modelo Task.
Continuar mejorando tus habilidades en pruebas de modelos es esencial para el desarrollo robusto de aplicaciones, y cada pequeño avance cuenta para alcanzar un producto final de alta calidad. ¡Sigue adelante y sigue aprendiendo!
Excelente este video sobre RSpec
Hasta ahora el mejor del curso
Hola a todos!
Tengo problemas al intentar hacer las preubas del modelo User, por un lado, me dice que la password no puede estar en blanco, sin embargo yo crei que esta se generaba en el controller de Devise al momento de hacer el new.
Por otro lado, me dice que las owned_tasks y las participations son invalidas.
Les adjunto imagenes de las pruebas y de la falla.
Muchas gracias!!
Hola Sebastián, para este caso, la prueba no necesariamente debería al inicio del proceso del save probar la existencias de las relaciones del modelo User, preguntate lo siguiente: ¿un registro del usuario puede existir en el sistema sin tareas propias o sin participaciones?, o también puedes preguntarte, ¿un usuario necesita ser participante de una tarea o haber creado una para existir?
Las respuestas a estas preguntas, es que el usuario es independiente de las tareas, así que puede existir así este no tenga ninguna tarea asociada, de hecho, en la realidad de la plataforma y su intereacción gráfica, primero debes crear los usuarios para luego en un paso posterior iniciar sesión y crear las tareas. Por lo que habiendo dicho esto, no es en el método save donde deberías probar esas relaciones, sino mas bien en una fase posterior y mediante otro tipo de pruebas o modelos, como es el caso del modelo Task que probamos en clase.
Por otro lado, para solucionar el error del password debes explícitamente crearlo en la invocación del método new algo similar a como fueron diseñadas las factories en una clase pasada.