SlideShare a Scribd company logo
1 of 28
Download to read 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!

More Related Content

What's hot

What's hot (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
 

Viewers also liked

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 Webgoal
 
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 CaldasWebgoal
 
Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011Scrum na Horta - Caipira Agil 2011
Scrum na Horta - Caipira Agil 2011Webgoal
 
Como tomar decisões em equipe
Como tomar decisões em equipeComo tomar decisões em equipe
Como tomar decisões em equipeWebgoal
 
Não me faça pensar
Não me faça pensarNão me faça pensar
Não me faça pensarWebgoal
 
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 JavaDaniel Faria Gomes
 
Lean Startup
Lean StartupLean Startup
Lean StartupWebgoal
 
Percona XtraBackup
Percona XtraBackupPercona XtraBackup
Percona XtraBackupWebgoal
 
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 TrabalhoWebgoal
 
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
 
Lean Startup - Ágiles 2011 Buenos Aires
Lean Startup - Ágiles 2011 Buenos AiresLean Startup - Ágiles 2011 Buenos Aires
Lean Startup - Ágiles 2011 Buenos AiresWebgoal
 
Business Model Canvas
Business Model CanvasBusiness Model Canvas
Business Model CanvasWebgoal
 

Viewers also liked (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
 

Similar to Gems para colocar seus testes no trilho

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 PerformanceFelipe Ribeiro
 
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 phpUnderControlDiego Tremper
 
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 phpUnderControlManuel Lemos
 
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 phpUnderControlDiego Tremper
 
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 phpUnderControlDiego Tremper
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014RSpec Best Friends @ Rupy Natal 2014
RSpec Best Friends @ Rupy Natal 2014Mauro George
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
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/11Rafael Souza
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
[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 ...iMasters
 
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ápidosElias Nogueira
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 

Similar to 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
 

More from Webgoal

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 ágeisWebgoal
 
Relacionamento com o Cliente
Relacionamento com o ClienteRelacionamento com o Cliente
Relacionamento com o ClienteWebgoal
 
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 ÁgeisWebgoal
 
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 empresaWebgoal
 
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 WebgoalWebgoal
 
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 CaldasWebgoal
 
Canvas Modelo Negocio - Caipira Agil 2011
Canvas Modelo Negocio - Caipira Agil 2011Canvas Modelo Negocio - Caipira Agil 2011
Canvas Modelo Negocio - Caipira Agil 2011Webgoal
 
Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011Lean startup - Agile Brazil 2011
Lean startup - Agile Brazil 2011Webgoal
 
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 2011Webgoal
 
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 2011Webgoal
 
Scrum na horta - Agile Brazil 2011
Scrum na horta - Agile Brazil 2011Scrum na horta - Agile Brazil 2011
Scrum na horta - Agile Brazil 2011Webgoal
 
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 equipesWebgoal
 
Tente desenvolver diferente com TDD
Tente desenvolver diferente com TDDTente desenvolver diferente com TDD
Tente desenvolver diferente com TDDWebgoal
 
Canvas - Business Model Generation
Canvas - Business Model GenerationCanvas - Business Model Generation
Canvas - Business Model GenerationWebgoal
 
Canvas - Modelo Negocio Agil
Canvas - Modelo Negocio AgilCanvas - Modelo Negocio Agil
Canvas - Modelo Negocio AgilWebgoal
 
Scrum na Horta - Agile Tour 2010
Scrum na Horta - Agile Tour 2010Scrum na Horta - Agile Tour 2010
Scrum na Horta - Agile Tour 2010Webgoal
 
Scrum na Horta - Agiles 2010
Scrum na Horta - Agiles 2010Scrum na Horta - Agiles 2010
Scrum na Horta - Agiles 2010Webgoal
 

More from 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
 

Gems para colocar seus testes no trilho