El pasado agosto de este año comencé a aprender Rails. Estaba siguiendo el libro Ruby on Rails Tutorial del sitio web Learn Enough To Be Dangerous que usa Minitest para probar su aplicación. La verdad es que no entendía ni una sola línea de código sobre esas pruebas. Así que decidí omitirlos e intentar escribirlo usando RSpec porque la sintaxis es mucho más similar al lenguaje humano que otros. Pero te estarás preguntando:
Bueno, a pesar de que esta es una habilidad imprescindible para los desarrolladores, escribir pruebas lo ayuda a asegurarse de que su código produzca los resultados que espera. Dicho esto, ¡comencemos a codificar!
En primer lugar, creemos nuestra nueva aplicación Rails, escriba en su terminal:
rails new app_for_test -T
El comando -T es para omitir la generación de
Test::Unit
archivos y carpetas, que es exactamente lo que queremos porque vamos a usar RSpec para probar nuestra aplicación en lugar del valor predeterminado.Ahora vaya a su archivo de gemas y agregue la gema RSpec en el grupo de desarrollo y prueba:
group :development , :test do gem 'rspec-rails' end
Nota: si está utilizando Rails 6, debe escribir:
'gem ' rspec-rails ', ' ~> 4.0 . 0 .beta2 '
Luego en tu terminal ejecuta el comando:
bundle install
Para configurar RSpec en su aplicación y crear la carpeta Spec, ejecute:
rails generate rspec:install
Comencemos con nuestro modelo. Crearé una tabla de películas simple que tenga un título, un director y una tarifa:
rails generate model Movie title: string director: string rate: integer
Después:
rails db :migrate
Ahora debería tener el siguiente archivo en su aplicación: spec/models/movie_spec.rb
Siguiendo los principios de TDD ( Desarrollo impulsado por pruebas ), vamos a construir nuestras pruebas y luego escribir el código. Pensemos en qué tipo de pruebas necesitamos para Model:
En su spec/model/movie_spec.rb verá el bloque RSpec donde escribirá sus pruebas dentro:
RSpec.describe Movie, type: :model do #tests go here end
Ahora crearemos bloques para cada comportamiento que esperamos en el modelo de la película. Así que recuerda ser lo más claro posible cuando describas tus pruebas porque necesitas ser un buen comunicador y hacerte comprensible no solo con las computadoras sino también con las personas.
Quizás te estés preguntando por qué subí una imagen, ¿verdad? Bueno, fue a propósito, por lo que de esta manera tendrá que escribir el código en lugar de simplemente copiar y pegar, y eso será realmente bueno para su memoria muscular y practicará con eventuales errores tipográficos.
Ahora para ejecutar sus pruebas, escriba en su terminal:
rspec
El comando anterior ejecutará todas las pruebas disponibles en toda su aplicación. Cuando desee ejecutar pruebas solo en algunos archivos específicos, puede escribir:
rspec spec /some_folder/ file_spec.rb
Ese formato en nuestra aplicación sería:
rspec spec /models/m ovie_spec.rb
Solo tenemos un archivo de prueba en esta aplicación, por lo que ambos comandos obtendrán los mismos resultados, que en nuestro caso son: 8 ejemplos, 8 fallas y esto tiene sentido porque si presta atención a lo que esperamos en las pruebas verá que ninguno de ellos debería ser válido y todos eso están siendo válidos ahora porque tenemos las validaciones de nuestro modelo completamente vacías.
¡Ahora escribamos las validaciones necesarias para que nuestras pruebas sean ecológicas!
En tu app/models/movie.rb, escribe las siguientes líneas:
validates :title , presence: true , length: { in: 6 .. 25 } validates :director , presence: true , length: { in: 5 .. 20 } validates :rate , presence: true , length: { in: 1 .. 10 }, numericality: { only_integer: true }
Ahora ejecute rspec nuevamente en su terminal:
rspec
Debería obtener: 8 ejemplos, 0 fallas .
¡Y eso es! Acabas de escribir tus primeras pruebas usando RSpec. Entonces, si desea continuar, intente escribir algunas especificaciones para el controlador de Movies ahora y cuando se sienta seguro con ellas, puede buscar y aprender a usar Capybara, FactorbyBot y Faker para escribir pruebas más complejas. Puedes revisar esto repositorio para tener algunas ideas.
¡Buena suerte con tu viaje y FELIZ CODIFICACIÓN!