Teste sua aplicação com RSpec

Criado por Clemens Helm, @clemenshelm e Floor Drees, @floordrees

Traduzido por Marina Limeira, @marinalimeira_

Esse guia assume que você já criou a app RailsGirls como mostrado no tutorial para criação da app Rails Girls.

RSpec é um framework para testes em Ruby, que descreve o comportamento da nossa aplicação em uma sintaxe que não se parece muito com Ruby. Ele irá mostrar o resultado dos testes no seu terminal, então você testará suas habilidades de leitura também.

INSTRUTOR(A): Fale sobre testes e Desenvolvimento Guiado por Comportamento (Behavior Driven Development).

1. Adicione a gem RSpec

Abra o seu Gemfile e adicione esta linha aos grupos: development e : test, acima da tag final:

group :development, :test do
  ...
  gem 'rspec-rails', '~> 3.5'
end

e rode

bundle install

para instalar a gem.

Em seguida, crie o diretório spec / dentro do seu aplicativo:

mkdir spec/

O diretório spec / é onde seus testes irão ficar. Finalmente, execute o seguinte comando:

rails generate rspec:install

Isso adiciona os seguintes arquivos usados para configuração:

2. Crie seu primeiro teste!

Rubystas frequentemente utilizam as palavras ‘teste’ e ‘especificação’ da mesma maneira, e é por isso que você irá armazenar seus testes no diretório ‘specs’. Para fazer isso, execute as seguintes passos:

Vamos criar um teste para o nosso modelo idea, para fazer isso de maneira elegante em Rails:

mkdir spec/models

Dentro desse novo arquivo, em nosso primeiro teste, queremos garantir que uma ideia tenha um nome. Para fazer isso, vamos descrever uma de nossas especificações:

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "tem um nome" do
    skip
  end
end

No seu terminal rode:

rspec spec/models/idea_spec.rb

qual será o resultado que seu teste está pendente, pois ainda não está implementado.

INSTRUTOR(A): Fale sobre ‘goglear’ a saída do terminal

Vamos fazer algo sobre isso!

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "tem um nome" do # sim, você pode user 'it' (lê-se como 'isso tem um nome')
    idea = Idea.create!(name: "Minha ideia maravilhosa") # criando uma nova ideia
    expect(idea.name).to eq("Minha ideia maravilhosa") # esperamos que seja salvo com o nome correto
  end
end

deve gerar uma saída mais adequada.

3. Refatorando

Você pode criar duas ideias, para ter certeza de que nosso projeto está criando ideias da maneira certa:

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "tem um nome" do # sim, você pode user 'it' (lê-se como 'isso tem um nome')
    idea = Idea.create!(name: "Minha ideia maravilhosa") # sim, você pode user 'it' (lê-se como 'isso tem um nome')
    second_idea = Idea.create!(name: "Minha segunda ideia maravilhosa") # criando uma nova ideia
    expect(second_idea.name).to eq("Minha segunda ideia maravilhosa") # esperamos que a segunda ideia seja salva corretamente
  end
end

que testa mais coisas.

INSTRUTOR(A): Fale um pouco sobre a refatoração.

4. Marcando os testes como a fazer

Sim! Listas de coisas a fazer. Maravilhoso. Uma boa funcionalidade do RSpec é a possibilidade de marcar alguns testes como pendente. Em outras palavras, primeiro você pensa sobre o que a implementação deve realizar, em seguida, escreve um teste para verificar se está funcionando.

Vamos criar nosso próximo teste, adicionando as linhas abaixo ao nosso idea_spec.rb

it "tem uma descricao"

retornará que o teste está pendente.

Você consegue completar este teste? Você consegue pensar em outros testes?

5. Desenvolvimento Guiado por Comportamento (BDD)

INSTRUTOR(A): Fale um pouco sobre Desenvolvimento Guiado por Comportamento (BDD).

Agora você pode criar mais testes sozinho. Sinta-se à vontade para falar com o seu treinador para fazer isso ou maneiras de criar mais testes.

Feliz testes!