Testes on Rails documento fornece instruções sobre como testar código Ruby on Rails usando gems como RSpec, Timecop e Factory Girl:
1) Explica como instalar e usar RSpec para escrever testes unitários que verificam o comportamento do código;
2) Demonstra como o Timecop permite controlar e viajar no tempo para testes que dependem de tempo;
3) Mostra como Webmock isola requisições HTTP para testar código que depende de APIs externas sem depender da API real;
4) Apresenta Factory Girl como alternativa às
7. ➔ Tenha controle do tempo ao executar os seus testes;
➔ Você consegue literalmente viajar no tempo;
➔ Poderíamos até prever o Bug do Milênio;
8. { }Tempo fixo
def start
@started = Time.now
end
it 'should save the initial time' do
Timecop.freeze do
auction.start
expect(auction.started).to eq Time.now
end
end
Teste
9. { }Variação de tempo
def bid(inc)
return false if (Time.now - @started) > 120
@value += inc
end
describe 'after 2 minutes' do
it 'should not accept bids' do
auction.start
Timecop.travel(Time.now + 120) do
expect(auction.bid(300)).to be_falsey
end
end
end
Teste
11. Dificuldades
➔ O seu código depende do retorno da API
➔ Você estará testando também a API externa
➔ A requisição HTTP pode demorar (ou não funcionar…)
➔ Você não tem total controle do retorno da requisição
12. def self.my_ip
req = get 'http://httpbin.org/ip'
parse = JSON.parse(req.body)
parse['origin']
end
it 'should get my ip' do
expect(ExternalApi.my_ip).to eq '192.168.1.1'
end
Teste
{ }Código
14. ➔ Criar mock das requisições HTTP
➔ Se você esquecer de alguma ou tiver dúvidas de como criar, ele
sugere para você
➔ Isole totalmente o seu código de interferências externas
15. def self.my_ip
req = get 'http://httpbin.org/ip'
parse = JSON.parse(req.body)
parse['origin']
end
it 'should get my ip' do
stub_request(:get, "http://httpbin.org/ip").
with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
to_return(:status=>200, :body=>'{"origin": "192.168.1.1"}')
expect(ExternalApi.my_ip).to eq '192.168.1.1'
end
Código
Teste
{ }