Teste sua aplicação com RSpec

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

RSpec é um framework de testes de Ruby que descreve o comportamento da sua aplicação em uma sintaxe que não se parece muito com a de Ruby. Exibe os resultados do teste no seu terminal para que você também teste suas habilidades de leitura.(trocadinho intencional).

COACH: Fale sobre testes e Behavior-Driven Development.

Instale o Rspec

Para começar, vamos instalar o RSpec e todas as suas dependências.

gem install rspec

E aí executamos

rspec --init

no diretório do nosso projeto. Isso cria o arquivo spec_helper.rb na pasta spec e o arquivo de configuração .rspec .

Rubistas costumam usar os termos ‘teste’ e ‘especificação’ como sinônimos e é por essa razão que você armazenarám seu testes na pasta ‘spec’. Salve o seu teste como idea_spec.rb (<name_of_spec>_spec.rb).

Dentro do novo arquivo, escreva:

require "spec_helper"
require "idea"

Em seguida, vamos escrever uma das nossas especificações

describe Idea do
  it "has a title" # your examples (tests) go here
end

No seu terminal, execute

rspec spec/lib/idea_spec.rb

que irá retornar que seu teste está pendente já que este ainda não foi implementado.

COACH: Fale sobre como pesquisar saídas do terminal

Vamos fazer algo a respeito então!

describe Idea do
  it "has a title" do # yep, you can totally use 'it'
    idea = Idea.new # creating a new idea 'instance'
    idea.title.should be_true # this is our expectation
  end
end

Isso deve mostrar um resultado mais satisfatório.

Refatoração

Você também pode escrever

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

que tem a aparência bem melhor do que o exemplo anterior, mas ainda existe muita magia envolvida nesse código.

Por enquanto é interessante saber que nós podemos ‘refatorar’ aqueles longos trechos de código em partes menores adquirindo pouco de mais experiência.

COACH: Fale um pouco mais sobre refatoração

Marcando os testes pendentes

Uhu! Uma funcionalidade marota do RSpec é a habilidade de se marcar certos testes como pendentes.

Ao se retirar o do e end do código do exemplo, da seguinte forma

it "has a title"

você marcará um teste como pendente. Para aplicações maiores, onde você quer atacar um teste por vez, você também pode adicionar a letra x no começo do teste:

describe Idea do  
  xit "has a title" do
end

ou usando o termo pending no seu teste.

Behavior-Driven Development

Normalmente escrevemos esse tipo de teste de uma maneira um pouco diferente. Pensando na aplicação que queremos construir, vamos escrever nossas expectativas e então começar a construir os testes passo a passo, com as especificações em mente.

Primeiramente vamos escrever

describe Idea do
  it "has a title"
    idea = Idea.new
    idea.title.should be_true
    # or, alternatively: idea.title.should == true
  end
end

e aí então criar um arquivo chamado idea.rb relativo à classe Idea.

class Idea
attr_accessor  :title
end

Se você executar o comando rspec spec/lib/idea_spec.rb no seu terminal, vai ocorrer um erro. Você não deve sentir medo de erros, eles são nossos amigos. :) Os erros do RSpec vão te ajudar a escrever o código necessário para implementar os testes!

Tente escrever testes para os demais items desse tutorial para verificar se você está conseguindo implementar as coisas de maneira correta.

describe Attendee do
  it "tests everything"
end

Só um toque.

Seja feliz testando!

Anterior   Próximo