Configurar un ambiente de pruebas con Ruby On Rails usando Rspec, Factory-girl, Capybara y otras librerías - parte 1
Escribir pruebas automatizadas se ha vuelto muy importante para el desarrollo de software. Con esta práctica encontramos dos términos muy importantes como TDD(test driven development) y BDD(Behavior driven development). Para mayor información puede consultar las siguientes fuentes:
En este post vamos a configurar un ambiente de pruebas en Ruby on Rails usando Rspec.
Rspec es un framework, un marco de trabajo que nos permite escribir pruebas guiadas al comportamiento(BDD), en la cual nos permite durante en el proceso escribir especificaciones mucho más legibles que dirijan y validen el desarrollo de una aplicación, para mayor información consultar las siguientes fuentes:
Creamos una aplicación Rails sin testing framework(minitest), Rails por defecto usa minitest para el ambiente de pruebas.
Para instalar Rspec
en un proyecto de Ruby On rails vamos a usar una gema llamada rspec-rails
Especificamos rspec-rails
en el archivo Gemfile
:
Descargar e instalar mediante el comando:
Ya cuando tengamos instalado rspec-rails
ejecutamos el siguente comando:
Esto nos genera los siguientes archivos que se utilizaran para la configuración:
create .rspec create spec create spec/spec_helper.rb create spec/rails_helper.rb
Lea los comentarios de cada archivo para mayor información.
Factory_girl es una libreria para crear objetos de los datos de nuestra aplicación. Faker es una libreria que nos permite generar datos falsos como nombres, emails, direcciones o números de teléfono.
Para su instalación lo especificamos en el Gemfile
:
Si creamos nuestros modelos por el generador de Rails, el nos crea un archivo por cada modelo en la carpeta spec/factories/
por ejemplo si creamos un modelo llamado User
:
Por defecto nos genera esto:
invoke active_record create db/migrate/20160215011855_create_users.rb create app/models/user.rb invoke rspec create spec/models/user_spec.rb invoke factory_girl create spec/factories/users.rb
Vemos en el resultado que nos crear una migración para dicho modelo y vemos que ejecuto factory_girl
y nos creo el siguiente archivo ubicado en spec/factories/users.rb
, dentro del archivo nos genera el siguente código:
Para que funcione Factory_girl
con Rspec
debemos decirle a Rspec
que use Factory_girl
, para hacer ese cambio modificamos lo siguente:
En el archivo spec/rails_helper.rb
:
Lo que vamos a modificar es comentar la linea config.fixture_path = "#{::Rails.root}/spec/fixtures"
y añadimos la linea config.include FactoryGirl::Syntax::Methods
para que quede algo asi:
Ahora usamos Faker
para poder generar datos falsos, para mirar todos los datos que se pueden generar con Faker
lo puede ver en el siguente enlace: https://github.com/stympy/faker#usage
Ahora usamos Faker
con factory_girl
, modificando el archivo que este nos creó para el modelo User
:
En la hora de crear nuestro modelo User
por el generador de Rails
dentro de la carpeta spec/
nos creo un archivo llamado spec/models/user_spec.rb
con el siguente código:
Ahora vamos a crear las pruebas:
Vamos a escribir una prueba que valide si es un registro valido, vamos a decirle al test que no es un registro valido si el nombre esta vacio o nulo:
Y lo ejecutamos por consola:
En mi caso mi prueba inicia en la linea 17.
Resultado:
Run options: include {:locations=>{"./spec/models/user_spec.rb"=>[17]}} F Failures: 1) User has invalid factory without name Failure/Error: expect(build(:user, name: nil)).not_to be_valid expected #<User id: nil, email: "jaida@kohler.name", name: nil, created_at: nil, updated_at: nil> not to be valid
Esta prueba no paso ya que nos falta agregar la validación al modelo:
Ahora si ya agregamos la validación al modelo y volvemos a correr el comando que nos hace ejecutar la prueba, el resultado seria el siguente:
Run options: include {:locations=>{"./spec/models/user_spec.rb"=>[17]}} . Finished in 0.93453 seconds (files took 7.72 seconds to load) 1 example, 0 failures
Y listo la prueba ya pasa.
Hasta aqui vimos la funcionalidad conjunta entre Rspec
, Factory_girl
y Faker
.
Si quiere ver todas las pruebas que se hiceron para el modelo User
y las validaciones que se agregaron para este modelo lo puede mirar en el siguente enlace en un repositorio en github:
https://github.com/nmenag/testing-rails-rspec/tree/install-factory-girl Este es el proyecto que estamos usando para explicar la configuración de un ambiente de pruebas en Rails.