Configurar Rspec en una aplicación Rails
Este es el primero de una serie de artículos en el que veremos como utilizar Rspec para probar las características de nuestra aplicación. Se instalarán las dependencias necesarias para configurar el ambiente de pruebas.
Las gemas a usar son:
- rspec-rails: Esta se encarga de generar el entorno para probar el aplicativo.
- FactoryBot: Gema que se encarga de generar data según el diseño de nuestro aplicativo.
- FFaker: En conjunto con FactoryBot genera datos de prueba de forma aleatoria.
- shoulda-machers: Trae consigo comparadores que hacen realizar las pruebas de manera más sencilla.
- Database-cleaner: Elimina la data de la base de datos cada vez que se realiza la prueba. De manera de no generar data que quede embasurada.
- Capybara: Gema que simula la interacción de una persona con el aplicativo a través del navegador.
- rails-controller-testing: Esta gema solo se tiene que instalar si se trabaja con la versión 5 de Rails, debido a que viene por defecto configurada en antiguas versiones, esta trae de nuevo la posibilidad de probar que data se asigna a las variables que definimos en los métodos del controlador.
- Selenium-Webdriver: Esta gema nos permite manipular y levantar el navegador para interactuar con este.
- SimpleCov: Esta gema nos ayuda a ver que tanto porcentaje de nuestro código ha sido probado.
Instalación
Nuestro Gemfile
group :test do
gem 'capybara', '>= 2.15', '< 4.0'
gem 'chromedriver-helper'
gem 'database_cleaner'
gem 'factory_bot_rails'
gem 'ffaker'
gem 'rails-controller-testing'
gem 'rspec-rails'
gem 'selenium-webdriver'
gem 'shoulda-matchers'
gem 'simplecov', require: false
end
Corremos bundle install
para instalar las nuevas dependencias agregadas a nuestro proyecto.
Configuración
Para la instalación de Rspec
y el resto de gemas es necesario correr ciertos comandos:
rails generate rspec:install
Este comando crea la carpeta spec/
en la raíz del proyecto, dentro de esta siguiendo las convenciones de la gema se deben crear las carpetas models/
,controllers/
,factories/
,features/
para realizar las respectivas pruebas.
Para configurar la integración de estas gemas en el archivo spec/rails_helper.rb
se deben colocar las siguientes líneas de código
RSpec.configure do |config|
.
.
# Solo si es Rails 5, integrar aspectos como assigns en los specs de controladores (rails-controller-testing)
[:controller, :view, :request].each do |type|
config.include ::Rails::Controller::Testing::TestProcess, :type => type
config.include ::Rails::Controller::Testing::TemplateAssertions, :type => type
config.include ::Rails::Controller::Testing::Integration, :type => type
end
.
.
# Para integración con FactoryBot
config.include FactoryBot::Syntax::Methods
.
.
# Para no llenar de basura la base de datos de prueba(database-cleaner)
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
end
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
Con esto hemos concluido esta primera parte de una serie de posts. En los siguientes veremos como generar data de prueba y los casos comunes de pruebas a nuestros modelos. Espero les sea de utilidad esta información. Cualquier duda, consejo o correción puedes comentar abajo.