gems para colocar seus testes no trilho

28
Testes on Rails

Upload: webgoal

Post on 11-Apr-2017

402 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Gems para colocar seus testes no trilho

Testes on Rails

Page 2: Gems para colocar seus testes no trilho

Como testar?

Page 3: Gems para colocar seus testes no trilho

gem install rspec

Page 4: Gems para colocar seus testes no trilho

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 endend

Teste{ }

Page 5: Gems para colocar seus testes no trilho

Como testar código que depende de tempo?

Page 6: Gems para colocar seus testes no trilho

gem install timecop

Page 7: Gems para colocar seus testes no trilho

➔ Tenha controle do tempo ao executar os seus testes;

➔ Você consegue literalmente viajar no tempo;

➔ Poderíamos até prever o Bug do Milênio;

Page 8: Gems para colocar seus testes no trilho

{ }Tempo fixo

def start @started = Time.nowend

it 'should save the initial time' do Timecop.freeze do auction.start expect(auction.started).to eq Time.now endend

Teste

Page 9: Gems para colocar seus testes no trilho

{ }Variação de tempo

def bid(inc) return false if (Time.now - @started) > 120 @value += incend

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 endend

Teste

Page 10: Gems para colocar seus testes no trilho

Como testar dependência de APIs?

Page 11: Gems para colocar seus testes no trilho

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

Page 12: Gems para colocar seus testes no trilho

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

Page 13: Gems para colocar seus testes no trilho

gem install webmock

Page 14: Gems para colocar seus testes no trilho

➔ 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

Page 15: Gems para colocar seus testes no trilho

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

{ }

Page 16: Gems para colocar seus testes no trilho

Fixtures?!?

Page 17: Gems para colocar seus testes no trilho

Dificuldades

➔ Manter vários arquivos YAML

➔ Gerenciar relacionamentos entre as models / fixtures

➔ “Acoplamento” com o AR

➔ Fixtures dinâmicas

Page 18: Gems para colocar seus testes no trilho

# spec/fixtures/users.ymlfoo: 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

{ }

Page 19: Gems para colocar seus testes no trilho

# spec/fixtures/users.ymlfoo: 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.ymlfoo_address: street: Foo Street number: 10 user_id: 1

Page 20: Gems para colocar seus testes no trilho

gem install factory_girl

Page 21: Gems para colocar seus testes no trilho

# spec/factories/users.rbFactoryGirl.define do factory :user do name “Foo” endend

it "is composed of first name" do user = FactoryGirl.create(:user) expect(user.name).to eq(“Foo”)end

Teste

{ }

Page 22: Gems para colocar seus testes no trilho

# spec/factories/foo.rbFactoryGirl.define do factory :user do name “Foo” end

factory :address do street “Foo Street” association :user, factory: :user endend

{ }

Page 23: Gems para colocar seus testes no trilho

Mais algumas coisas legais

#build

#create

#attributes_for

#build_stubbed

#hooks

Page 24: Gems para colocar seus testes no trilho

Como escolher as Gems para meu projeto?

Page 25: Gems para colocar seus testes no trilho

ruby-toolbox.com

Page 26: Gems para colocar seus testes no trilho

rubygems.org

Page 27: Gems para colocar seus testes no trilho

https://github.com/webgoal/tests-on-rails

Page 28: Gems para colocar seus testes no trilho

fb.com/[email protected]

fb.com/[email protected]

fb.com/[email protected]

Obrigado!