Primeiramente vamos instalar Gem Spec.
$ gem install rspec
Agora vamos criar a nossa estrutura onde vamos trabalhar um exemplo simples.
$ mkdir bowling
$ cd bowling
$ mkdir spec
$ mkdir lib
$ cd bowling
$ mkdir spec
$ mkdir lib
Comece com um exemplo muito simples que expressa algum comportamento básico desejado.
# vamos criar um arquivo chamado bowling_spec.rb
# dentro pasta spec que criamos agora a pouco
require 'rubygems'
# o require a rubygems é para que eu possa
# chamadar a gem spec e testar minha aplicação.
require 'spec'
# e este require é do meu arquivo de boliche
# onde vou tentar validar seu código, com testes.
require 'lib/bowling'
# aqui é onde vamos descrever um boliche
describe Bowling do
# vamos descrever um comportamento
# deve ter 0 escore na calha do jogo
it "should score 0 for gutter game" do
# cria um novo objeto
bowling = Bowling.new
# passa o valor 0 pinos para o método hit
20.times { bowling.hit(0) }
# aqui ele diz: score deveria ser igual a 0
bowling.score.should == 0
end
end
# dentro pasta spec que criamos agora a pouco
require 'rubygems'
# o require a rubygems é para que eu possa
# chamadar a gem spec e testar minha aplicação.
require 'spec'
# e este require é do meu arquivo de boliche
# onde vou tentar validar seu código, com testes.
require 'lib/bowling'
# aqui é onde vamos descrever um boliche
describe Bowling do
# vamos descrever um comportamento
# deve ter 0 escore na calha do jogo
it "should score 0 for gutter game" do
# cria um novo objeto
bowling = Bowling.new
# passa o valor 0 pinos para o método hit
20.times { bowling.hit(0) }
# aqui ele diz: score deveria ser igual a 0
bowling.score.should == 0
end
end
Vamos executar o teste e vê-lo falhar.
$ spec spec/bowling_spec.rb --format specdoc
./spec/bowling_spec.rb:11: uninitialized constant Bowling
./spec/bowling_spec.rb:11: uninitialized constant Bowling
Agora, vamos escrever o código apenas o suficiente para fazê-lo passar.
# bowling - boliche
class Bowling
def hit(pins)
end
def score
0
end
end
class Bowling
def hit(pins)
end
def score
0
end
end
Execute o exemplo novamente e veja o teste passar.
$ spec spec/bowling_spec.rb --format specdoc
Bowling
- should score 0 for gutter game
Finished in 0.002854 seconds
1 example, 0 failures
Bowling
- should score 0 for gutter game
Finished in 0.002854 seconds
1 example, 0 failures
Tomar medidas pequenas(baby-steps)
Não se apresse em escrever muito código. Em vez disso, adicionar outro exemplo, e deixá-lo guiar dizendo o que você tem que fazer a seguir. E não se esqueça de ter tempo para refatorar seu código antes que ele fique confuso. Você deve manter seu código limpo, a cada passo dado no seu caminho.



