sampope 5: Como instalar RSpec e Capybara numa aplicação Rails?

Instalando RSpec e Capybara numa aplicação Rails

criamos nossa aplicação Rails, demos uma home customizada para ela, e até fizemos um deploy dela para o Heroku.

Agora poderíamos já começar a criar umas features legais e fazer a coisa toda tomar forma, mas ainda precisamos configurar nossa parte de testes. Quando criamos nossa aplicação, acrescentamos -T para "pular" a parte de testes, lembra?

Fizemos isso porque ao invés de usar o suite de testes padrão do Rails, vamos usar o RSpec e o Capybara. Juntos eles nos permitirão não só testar nossas lógicas e classes, mas também o comportamento da nossa aplicação para o usuário. Estamos falando de TDD e BDD, duas abordagens que vamos usar durante todo o desenvolvimento da nossa aplicação. Clique nestes links e aprenda mais sobre estes conceitos. Prometo que vai valer a pena!

1 - Acrescente a gem 'rspec-rails' ao seu Gemfile

Esta é a gem do rspec já preparada para trabalhar dentro do Rails. Instalação, configuração, e uso ficam muito mais fáceis e práticos.

gem 'rspec-rails'

Eu coloco essa gem no bloco :development, :test do Gemfile, porque ela não é necessária em produção.

2 - Rode o comando 'bundle install'

Quando rodamos bundle install, estamos pedindo para o Bundler instalar esta gem na nossa máquina e no nosso projeto.

vivipoit ~/projects/sampope (master)
> bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
[...]
Fetching rspec-support 3.9.3
Installing rspec-support 3.9.3
Fetching rspec-core 3.9.2
Installing rspec-core 3.9.2
[...]
Bundle complete! 15 Gemfile dependencies, 72 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

3 - Rode o comando 'rails generate rspec:install'

Este comando pede para que o Rails instale o RSpec na nossa aplicação, criando automaticamente alguns arquivos de configuração que vamos precisar. Aprenderemos mais sobre eles no futuro.

vivipoit ~/projects/sampope (master)
> rails generate rspec:install
Running via Spring preloader in process 1585
      create  .rspec
      create  spec
      create  spec/spec_helper.rb
      create  spec/rails_helper.rb

Ao terminar este passo, o RSpec em si já estará instalado. Para ter certeza, basta rodar o comando rspec,  que chama os arquivos de testes e roda cada um. No nosso caso, não temos nenhum ainda, mas se a instalação estiver correta, veremos a linha 0 examples, 0 failures.


4 - Acrescente a gem 'capybara' ao seu Gemfile

Agora vamos instalar a gem do Capybara em si, que vai nos ajudar a escrever testes ainda mais práticos e humanizados.

gem 'capybara'

5 - Novamente rode o comando 'bundle install'

Toda vez que instalamos uma nova gem, precisamos rodar o bundle install. Quando estamos instalando mais de uma gem (como neste caso), é possível colocar as duas de uma vez no Gemfile e rodar bundle install uma vez só. Aqui eu separei a rspec-rails e a capybara por razões didáticas.

vivipoit ~/projects/sampope (master)
> bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.

[...]

Bundle complete! 16 Gemfile dependencies, 77 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

6 - Acrescente a linha require 'capybara/rails' no seu arquivo rails_helper.rb

Dentro do diretório spec, tem um arquivo chamado rails_helper.rb. Este diretório e este arquivo foram criados automaticamente quando rodamos o comando rails generate rspec:install no passo 3.

Quando abrir o arquivo, você verá que no início ele já tem alguns "requires". Vamos colocar a linha require 'capybara/rails' logo após o último require:

# spec/rails_helper.rb

# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
require 'capybara/rails'

Pronto!

Finalizamos todos os passos e agora temos estas duas ferramentas poderosíssimas à nossa disposição para criarmos testes e desenvolvermos com segurança. No próximo post vamos escrever nosso primeiro teste!

Nenhum comentário:

Postar um comentário

E depois que seu código funciona, o que mais ele pode fazer?

Conhecer um idioma e se comunicar bem nele são a mesma coisa? Nem sempre, né? Você pode saber vocabulário, gramática, e até gírias, mas se n...