Cómo leer la salida de las pruebas en Ruby
Para entender la salida de las pruebas, primero es importante explicar cómo funcionan las pruebas en la plataforma.
⚙️ La prueba de código en Ruby se realiza utilizando el framework minitest, y las pruebas en sí están escritas en Ruby. La verificación del código se realiza automáticamente al hacer clic en el botón «Comprobar». El programa en prueba se compila y verifica con diferentes datos de entrada. Las pruebas se aseguran de que el comportamiento del programa sea el esperado.
Cuando las pruebas se completan, el resultado de la verificación aparece en la pestaña «OUTPUT». Si hay algún error en esta etapa, es necesario leer la salida de las pruebas. Esta salida es nuestra principal herramienta para depurar el código.
Tipos de errores
Nadie escribe código de manera perfecta. Por lo tanto, tarde o temprano te enfrentarás a errores.
Los errores durante la ejecución del ejercicio se pueden dividir condicionalmente en dos tipos:
- Errores del intérprete: diversos errores sintácticos y excepciones incorporadas en Ruby.
- Errores de aserción (AssertionError): errores causados por las pruebas. Ocurren si el resultado de la función no coincide con el resultado esperado.
Errores del intérprete
Los errores del intérprete se pueden dividir condicionalmente en dos categorías:
⛔ Errores sintácticos (SyntaxError)
Violaciones de la sintaxis y la puntuación del lenguaje. Cuando se ejecuta el intérprete de Ruby, genera un error SyntaxError si no puede entender cómo leer una expresión incorrecta. ****Si se omite un dos puntos, el intérprete indicará dónde se espera:
⛔ Errores semánticos (excepciones)
Estos errores no impiden la ejecución del programa, pero no funciona como se espera. Estos errores no están relacionados con las pruebas y señalan un problema en el código.
En Ruby, hay una gran cantidad de excepciones, pero no es necesario conocerlas todas. Por lo general, el nombre de la excepción generada y el mensaje de error explican claramente cuál es el problema. Por ejemplo, al referenciar una variable no declarada, se generará la excepción NameError y un mensaje indicando que la variable result
no está definida:
No hay necesidad de temer a las excepciones: simplemente lee la descripción de la excepción y comprenderás lo que Ruby está indicando. Si la descripción no es suficiente, siempre puedes consultar la documentación, que describe los casos en que ocurren diversas excepciones.
Una de las características distintivas y agradables de Ruby es que si cometes un error en el nombre del método, Ruby te indicará cuál método se quiso decir:
Errores de aserción
Estos errores ocurren si el resultado de la función no coincide con el resultado esperado.
Para entender cómo se ven las pruebas para los ejercicios, primero veamos las pruebas:
La función bajo prueba se llama en las pruebas con parámetros específicos. El resultado de esta función se compara con un resultado esperado predefinido.
Si el resultado real y el esperado coinciden, entonces todo está bien y las pruebas se pasan. Pero si los valores no coinciden, se produce un AssertionError. Examinemos más de cerca la salida en la pestaña «OUTPUT» en caso de que las pruebas fallen:
Aquí observamos lo siguiente:
- Nombre de la prueba donde se detuvo la ejecución:
test_0001_should works
- Archivo y línea con el error:
[test.rb:12]
- Descripción del problema: al comparar la cadena
'**3521'
con el resultado esperado, la función devolviófalse
. Para que este caso de prueba se considere aprobado, la comparación debería devolver true. - Resultado real de la llamada a
prepare_card_for_display(card_number1)
, que es igual a"**521"
- Valor del parámetro pasado a la función:
"102983470123521"
Al estudiar esta salida, podemos entender la causa del desacuerdo en los resultados. Esto ayudará a abordar la razón del mal funcionamiento del código bajo prueba.
Depuración de código
A veces, a primera vista, es imposible entender la causa del comportamiento incorrecto del código. En ese caso, la depuración viene al rescate: la posibilidad de echar un vistazo al proceso de ejecución del código.
Hay varias formas, pero examinaremos la más simple y común: la impresión de depuración que implica mostrar en la pantalla los valores de las variables, llamadas a funciones, mensajes de ejecución de bucles durante la ejecución del programa.
Para esto, simplemente agrega una llamada a puts()
con el valor de interés.
Luego, simplemente vuelve a ejecutar la comprobación de las pruebas para ver los resultados de nuestra impresión de depuración en la pestaña «OUTPUT».
Esto facilita el seguimiento del proceso de ejecución del programa y, por lo tanto, identificar dónde se ha introducido un error se vuelve mucho más sencillo.
Sin Comentarios