SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Testes on Rails
Como testar?
gem install rspec
describe 'In my calculator' do
context 'when plus 1 to 2' do
it 'should return 3' do
expect(Calculator.sum(1, 2)).to eq 3
end
end
end
Teste
{ }
Como testar código que
depende de tempo?
gem install timecop
➔ Tenha controle do tempo ao executar os seus testes;
➔ Você consegue literalmente viajar no tempo;
➔ Poderíamos até prever o Bug do Milênio;
{ }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
{ }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
Como testar dependência de
APIs?
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
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
gem install webmock
➔ 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
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
{ }
Fixtures?!?
Dificuldades
➔ Manter vários arquivos YAML
➔ Gerenciar relacionamentos entre as models / fixtures
➔ “Acoplamento” com o AR
➔ Fixtures dinâmicas
# spec/fixtures/users.yml
foo:
name: Foo
last_name: Bar
it "is composed of first name" do
user = users(:foo)
expect(user.name).to eq(“Foo”)
end
Código
Teste
{ }
# spec/fixtures/users.
yml
foo:
id: 1
name: Foo
last_name: Bar
it "is composed of street name" do
address = addresses(:foo)
expect(address.street).to eq(“Foo Street”)
expect(address.user.name).to eq(“Foo”)
end
Código
Teste
{ }# spec/fixtures/addresses.
yml
foo_address:
street: Foo Street
number: 10
user_id: 1
gem install factory_girl
# spec/factories/users.rb
FactoryGirl.define do
factory :user do
name “Foo”
end
end
it "is composed of first name" do
user = FactoryGirl.create(:user)
expect(user.name).to eq(“Foo”)
end
Teste
{ }
# spec/factories/foo.rb
FactoryGirl.define do
factory :user do
name “Foo”
end
factory :address do
street “Foo Street”
association :user, factory: :user
end
end
{ }
Mais algumas coisas legais
#build
#create
#attributes_for
#build_stubbed
#hooks
Como escolher as Gems
para meu projeto?
ruby-toolbox.com
rubygems.org
https://github.com/webgoal/tests-on-rails
fb.com/mauricio.matsuda
mauricio@webgoal.com.br
fb.com/rafavalerio90
rafael@webgoal.com.br
fb.com/gustavovnicius
gustavo@webgoal.com.br
Obrigado!

Mais conteúdo relacionado

Mais procurados (8)

A busca pelo deploy continuo
A busca pelo deploy continuoA busca pelo deploy continuo
A busca pelo deploy continuo
 
Javafx Gui
Javafx GuiJavafx Gui
Javafx Gui
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
A Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCampA Arte do Deployment - WebDevCamp
A Arte do Deployment - WebDevCamp
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Sist operacionais 7
Sist operacionais 7Sist operacionais 7
Sist operacionais 7
 
Plack
PlackPlack
Plack
 

Destaque

Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011
Webgoal
 
Você não tem um produto (Design de serviços)
Você não tem um produto (Design de serviços)Você não tem um produto (Design de serviços)
Você não tem um produto (Design de serviços)
Webgoal
 

Destaque (14)

Feedback ao invés de avaliação de desempenho
Feedback ao invés de avaliação de desempenho Feedback ao invés de avaliação de desempenho
Feedback ao invés de avaliação de desempenho
 
Desmistificando o nao-modelo Spotify
Desmistificando o nao-modelo SpotifyDesmistificando o nao-modelo Spotify
Desmistificando o nao-modelo Spotify
 
Desenvolvimento ágil na prática - Agile Tour 2011 Poços de Caldas
Desenvolvimento ágil na prática - Agile Tour 2011 Poços de CaldasDesenvolvimento ágil na prática - Agile Tour 2011 Poços de Caldas
Desenvolvimento ágil na prática - Agile Tour 2011 Poços de Caldas
 
Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011
 
Como tomar decisões em equipe
Como tomar decisões em equipeComo tomar decisões em equipe
Como tomar decisões em equipe
 
Não me faça pensar
Não me faça pensarNão me faça pensar
Não me faça pensar
 
VRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em JavaVRaptor - Alta produtividade no Desenvolvimento Web em Java
VRaptor - Alta produtividade no Desenvolvimento Web em Java
 
Lean Startup
Lean StartupLean Startup
Lean Startup
 
Percona XtraBackup
Percona XtraBackupPercona XtraBackup
Percona XtraBackup
 
Motivacao e Felicidade no Ambiente de Trabalho
Motivacao e Felicidade no Ambiente de TrabalhoMotivacao e Felicidade no Ambiente de Trabalho
Motivacao e Felicidade no Ambiente de Trabalho
 
Você não tem um produto (Design de serviços)
Você não tem um produto (Design de serviços)Você não tem um produto (Design de serviços)
Você não tem um produto (Design de serviços)
 
Testes e Refatoração
Testes e RefatoraçãoTestes e Refatoração
Testes e Refatoração
 
Lean Startup - Ágiles 2011 Buenos Aires
Lean Startup - Ágiles 2011 Buenos AiresLean Startup - Ágiles 2011 Buenos Aires
Lean Startup - Ágiles 2011 Buenos Aires
 
Business Model Canvas
Business Model CanvasBusiness Model Canvas
Business Model Canvas
 

Semelhante a Gems para colocar seus testes no trilho

Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
Wesley Lemos
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
PrinceGuru MS
 

Semelhante a Gems para colocar seus testes no trilho (20)

PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
 
Integracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
 
Integração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControlIntegração Contínua com Cruise Control e phpUnderControl
Integração Contínua com Cruise Control e phpUnderControl
 
Infrastructure Testing
Infrastructure TestingInfrastructure Testing
Infrastructure Testing
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Python 08
Python 08Python 08
Python 08
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014
 
04_Introducao_JavaScript.pdf
04_Introducao_JavaScript.pdf04_Introducao_JavaScript.pdf
04_Introducao_JavaScript.pdf
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
[JS EXPERIENCE 2018] Segurança para Desenvolvedores JavaScript - Alan Cezar ...
[JS EXPERIENCE 2018]  Segurança para Desenvolvedores JavaScript - Alan Cezar ...[JS EXPERIENCE 2018]  Segurança para Desenvolvedores JavaScript - Alan Cezar ...
[JS EXPERIENCE 2018] Segurança para Desenvolvedores JavaScript - Alan Cezar ...
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 

Mais de Webgoal

Conhecimento é o fator mais importante para o sucesso de uma empresa
Conhecimento é o fator mais importante para o sucesso de uma empresaConhecimento é o fator mais importante para o sucesso de uma empresa
Conhecimento é o fator mais importante para o sucesso de uma empresa
Webgoal
 
Compartilhando histórias de gestão 3.0 da Webgoal
Compartilhando histórias de gestão 3.0 da WebgoalCompartilhando histórias de gestão 3.0 da Webgoal
Compartilhando histórias de gestão 3.0 da Webgoal
Webgoal
 
Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011
Webgoal
 
Canvas - Modelo Negocio Agil
Canvas - Modelo Negocio AgilCanvas - Modelo Negocio Agil
Canvas - Modelo Negocio Agil
Webgoal
 

Mais de Webgoal (17)

Visão geral sobre os métodos ágeis
Visão geral sobre os métodos ágeisVisão geral sobre os métodos ágeis
Visão geral sobre os métodos ágeis
 
Relacionamento com o Cliente
Relacionamento com o ClienteRelacionamento com o Cliente
Relacionamento com o Cliente
 
Análise de Negócio e Requisitos Ágeis
Análise de Negócio e Requisitos ÁgeisAnálise de Negócio e Requisitos Ágeis
Análise de Negócio e Requisitos Ágeis
 
Conhecimento é o fator mais importante para o sucesso de uma empresa
Conhecimento é o fator mais importante para o sucesso de uma empresaConhecimento é o fator mais importante para o sucesso de uma empresa
Conhecimento é o fator mais importante para o sucesso de uma empresa
 
Compartilhando histórias de gestão 3.0 da Webgoal
Compartilhando histórias de gestão 3.0 da WebgoalCompartilhando histórias de gestão 3.0 da Webgoal
Compartilhando histórias de gestão 3.0 da Webgoal
 
Lean Startup - Agile Tour 2011 Poços de Caldas
Lean Startup - Agile Tour 2011 Poços de CaldasLean Startup - Agile Tour 2011 Poços de Caldas
Lean Startup - Agile Tour 2011 Poços de Caldas
 
Canvas Modelo Negocio - Caipira Agil 2011
Canvas Modelo Negocio - Caipira Agil 2011Canvas Modelo Negocio - Caipira Agil 2011
Canvas Modelo Negocio - Caipira Agil 2011
 
Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011
 
Tente Desenvolver Diferente com TDD - Agile Brazil 2011
Tente Desenvolver Diferente com TDD - Agile Brazil 2011Tente Desenvolver Diferente com TDD - Agile Brazil 2011
Tente Desenvolver Diferente com TDD - Agile Brazil 2011
 
Canvas Business Model Generation - Agile Brazil 2011
Canvas Business Model Generation - Agile Brazil 2011Canvas Business Model Generation - Agile Brazil 2011
Canvas Business Model Generation - Agile Brazil 2011
 
Scrum na horta - Agile Brazil 2011
Scrum na horta - Agile Brazil 2011Scrum na horta - Agile Brazil 2011
Scrum na horta - Agile Brazil 2011
 
Técnicas de Facilitação para projetos e equipes
Técnicas de Facilitação para projetos e equipesTécnicas de Facilitação para projetos e equipes
Técnicas de Facilitação para projetos e equipes
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDD
 
Canvas - Business Model Generation
Canvas - Business Model GenerationCanvas - Business Model Generation
Canvas - Business Model Generation
 
Canvas - Modelo Negocio Agil
Canvas - Modelo Negocio AgilCanvas - Modelo Negocio Agil
Canvas - Modelo Negocio Agil
 
Scrum na Horta - Agile Tour 2010
Scrum na Horta - Agile Tour 2010Scrum na Horta - Agile Tour 2010
Scrum na Horta - Agile Tour 2010
 
Scrum na Horta - Agiles 2010
Scrum na Horta - Agiles 2010Scrum na Horta - Agiles 2010
Scrum na Horta - Agiles 2010
 

Último

Último (8)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Gems para colocar seus testes no trilho