Teste sua aplicação com RSpec

Criado por Clemens Helm, @clemenshelm e Floor Drees, @floordrees
Traduzido por Marina Limeira, @marinalimeira_

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.

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

Instale o RSpec

Para quem está iniciando, vamos instalar o RSpec e todas suas dependências.

gem install rspec

ou então, adicione ele ao seu Gemfile

gem 'rspec'

Então a gente pode chamar

rspec --init

no diretório do nosso projeto. Isso irá criar spec_helper.rb no diretório spec, e o arquivo .rspec.

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’. Salve seus testes como idea_spec.rb (<nome_do_spec>_spec.rb).

Dentro desse novo arquivo, escreva:

require "spec_helper"
require "idea"

Depois, vamos descrever uma das nossas especificações

describe Idea do
  it "possui um título" # seus exemplos (testes) vão aqui
end

No terminal rode

rspec spec/lib/idea_spec.rb

que irá dizer que seu teste está pendente e ainda não foi implementado.

COACH: Fale sobre pesquisar no google a saida do terminal.

Vamos fazer algo sobre isso!

describe Idea do
  it "possui um título" do
    idea = Idea.new           # criando uma nova instância de Idea
    idea.title.should be_true # esse é o resultado esperado do nosso teste
  end
end

deve te dar uma saida mais satisfatória.

Refatorando

Você pode também escrever:

describe Idea do
  its(:title) { should be_true }
end

o que parece muito melhor, mas existe muita mágica envolvida. Por agora provavelmente é bom saber que a gente pode ‘refatorar’ estes enormes blocos de código em coisas menores, com um pouco mais de experiência.

COACH: Fale sobre refatoramento.

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.

Retirando o do e o end do exemplo no corpo do texte, como em

it "possui um título"

irá marcar os testes como pendentes. Para aplicações maiores, quando você quiser pular um teste por vez, você pode também adicionar um x na frente do exemplo, fazendo ele parecer como

describe Idea do
  xit "possui um título" do
  end
end

ou utilizar a palavra pending no seu exemplo.

Desenvolvimento Guiado por Comportamento (BDD)

Normalmente nós iremos pensar sobre BDD como uma maneira diferente de fazer nossa aplicação. Pense sobre a aplicação que queremos construir, então iremos escrever as nossas expectativas (os nossos testes) e então começar a construir a aplicação passo a passo, com as especificações em mente.

Escrevemos primeiro

describe Idea do
  it "possui um título"
    idea = Idea.new
    idea.title.should be_true
    # uma alternativa: idea.title.should == true
  end
end

e então crie um arquivo chamado idea.rb introduzindo a classe Idea

class Idea
  attr_accessor :title
end

rodando rspec spec/lib/idea_spec.rb no seu terminal antes de ter implementado a classe irá retornar um erro. Felizmente, erros não são algo para se temer. Os erros do RSpec na verdade te ajudam a escrever o código (necessário)! Você sempre irá se preocupar em escrever código suficiente apenas para o teste passar, evitando fazer algo que provavelmente você não irá utilizar depois.

Tente escrever testes para os outros guias para checar que você está implementando TODAS as coisas certas (e necessárias).

describe Attendee do
  it "testa tudo"
end

Apenas dizendo.

Feliz testes!