Probar en la pista de YAMLScript

Aprende a probar tus ejercicios de YAMLScript en Exercism


Probar las soluciones de ejercicios de Exercism escritas en YAMLScript es muy fácil. Fáciles de ejecutar y fáciles de entender.

Solo tienes que ejecutar make test en el directorio del ejercicio.

La primera vez que ejecutes make test, todas las pruebas fallarán, simplemente porque todavía no has escrito ningún código para resolverlas.

El proceso normal al desarrollar un ejercicio consiste en empezar con make test y luego concentrarte en una prueba a la vez, escribiendo código para que esa prueba pase. Cuando todas las pruebas pasen, ¡habrás terminado!

Como ventaja adicional, ejecutar make test también se asegurará de que la versión correcta del intérprete ys de YAMLScript (la que requiere el ejercicio actual) esté instalada en el lugar correcto (en /path/to/exercism/yamlscript/.local/). Eso significa que ni siquiera tienes que instalar ys de antemano para empezar.

Estructura de un directorio de ejercicio

Si estás trabajando en un ejercicio llamado the-great-exercise, exercism download --exercise=the-great-exercise --track=yamlscript creará el directorio /path/to/exercism/yamlscript/the-great-exercise.

Dentro de este directorio, el archivo de pruebas se llamará the-great-exercise-test.ys y el archivo del programa de solución se llamará the-great-exercise.ys. También habrá un archivo README.md con la descripción del ejercicio y un archivo HELP.md con información útil por si te quedas atascado.

Habrá dos archivos para make: Makefile y GNUmakefile. Esto es para asegurarte (npi) de que estás usando GNU make para ejecutar las pruebas y no algún otro comando make que pueda estar instalado en tu sistema. El archivo GNUmakefile es el de verdad, y GNU make siempre lo preferirá antes que Makefile. Otros comandos make usarán el Makefile, que debería dar un error con un mensaje que te diga que uses GNU make.

Anatomía de un archivo de pruebas

Las pruebas de YAMLScript están escritas en YAMLScript, ¡cómo no! Dado que YAMLScript es YAML y YAML son datos, las pruebas son básicamente datos.

Aquí tienes un ejemplo de un archivo de pruebas sencillo. En realidad son las 3 primeras pruebas del ejercicio acronym. :-)

#!/usr/bin/env ys-0

use ys::taptest: :all
load: 'acronym.ys'

test::
- name: Basic
  code: abbreviate('Portable Network Graphics')
  want: PNG

- name: Lowercase words
  code: abbreviate('Ruby on Rails')
  want: ROR

- name: Punctuation
  code: abbreviate('First In, First Out')
  want: FIFO

done: 3

La primera línea es una línea shebang que le dice al comando prove (ejecutado por el Makefile) que use el intérprete ys de YAMLScript para ejecutar las pruebas en lugar de perl, que es el valor predeterminado de prove.

La segunda línea es una instrucción use que carga la biblioteca de pruebas TAP ys::taptest de YAMLScript.

Nota: TAP es una interfaz sencilla basada en texto entre los scripts de pruebas y los arneses de prueba, y prove es el arnés estándar para ejecutar pruebas TAP en Perl. Como Perl está tan extendido, usar TAP y prove acaba siendo una elección muy buena para las suites de pruebas de muchos lenguajes (incluido YAMLScript).

La instrucción use carga el programa de solución acronym.ys, que es el que este archivo de pruebas pone a prueba.

Todas nuestras pruebas están en una secuencia YAML bajo la clave test.

La última línea, done:, es obligatoria y le indica al arnés de pruebas que todas las pruebas se ejecutaron realmente. El número (que es opcional) es la cantidad de pruebas que esperábamos ejecutar.

Cada prueba (bajo la clave test) es un mapa con estos pares clave/valor:

  • name: - La etiqueta de la prueba, que imprime prove -v.
  • code: - El código YAMLScript que se va a ejecutar. Este código llamará a alguna función del programa de solución en el que estamos trabajando.
  • what: - En las pruebas que esperan que ocurra un error, el valor es error. En las pruebas normales, el par no está presente.
  • want: - El resultado esperado de la prueba. Es un valor YAML y puede ser un string, un número, un boolean, una secuencia o un mapa. Si what: es error, este valor es el mensaje de error esperado.
  • SKIP: - Ponlo a true para omitir la ejecución de esa prueba.
  • ONLY: - Ponlo a true para ejecutar solo esa prueba. Si tienes más de una prueba con ONLY:, se ejecutarán todas.

¡Esto debería ser todo lo que necesitas saber para hacer desarrollo guiado por pruebas en YAMLScript con los ejercicios de Exercism!

La biblioteca ys::taptest tiene otras funcionalidades que puedes usar para escribir pruebas más complejas, pero las pruebas de Exercism ya están escritas para ti. Para saber más sobre la biblioteca ys::taptest, consulta la documentación.