22

Click here to load reader

Testes Rápidos

Embed Size (px)

DESCRIPTION

Testes Rápidos

Citation preview

Page 1: Testes Rápidos

Testes Rápidos Tomás D’Stefano @tomas_stefano

quinta-feira, 3 de maio de 2012

Page 2: Testes Rápidos

DiscussãoBoot e Execução

quinta-feira, 3 de maio de 2012

Page 3: Testes Rápidos

Boot da app

quinta-feira, 3 de maio de 2012

Page 4: Testes Rápidos

Single Responsability Principle

Nunca deve existir mais de uma razão para que uma classe mude.

quinta-feira, 3 de maio de 2012

Page 5: Testes Rápidos

Gemfile

gem ‘rails’gem ‘airbrake’gem ‘cancan’gem ‘carrierwave’gem ‘devise’gem ‘enumerate_it’gem ‘foreigner’gem ‘omniauth’gem ‘pg’# ... 21 gems -> Total

quinta-feira, 3 de maio de 2012

Page 6: Testes Rápidos

PORO(Plain Old Ruby Objects)

class OmniAuthUser def initialize(user) @user = user end

def create(omni_auth_data={}) # ... endend

quinta-feira, 3 de maio de 2012

Page 7: Testes Rápidos

PORO(Plain Old Ruby Object)

require ‘spec_helper’describe OmniAuthUser do let(:data) { stub(:provider => :facebook, ‘...’) } describe ‘#create’ do # ... endend

quinta-feira, 3 de maio de 2012

Page 8: Testes Rápidos

Necessário?

⤷ time rspec spec/spec_helper.rb real 0m8.194suser0m7.802ssys 0m1.391s

quinta-feira, 3 de maio de 2012

Page 9: Testes Rápidos

1º Solução - Trivial -> Require

$:.unshift File.expand_path(’../../’, __FILE__)require_model :omni_auth_userrequire ‘app/services/cielo’

quinta-feira, 3 de maio de 2012

Page 10: Testes Rápidos

Tempo da 1º Solução

⤷ time rspec spec/unit_test.rbreal 0m0.681suser0m0.544ssys 0m0.138s

quinta-feira, 3 de maio de 2012

Page 11: Testes Rápidos

Desvantagem

require na mão! :\

quinta-feira, 3 de maio de 2012

Page 12: Testes Rápidos

2º Solução - ActiveSupport::Dependencies

quinta-feira, 3 de maio de 2012

Page 13: Testes Rápidos

2º Solução - ActiveSupport::Dependencies

require ‘active_support/dependencies’%w(app/business app/models).each do |path| ActiveSupport::Dependencies.autoload_paths.push(path)end

quinta-feira, 3 de maio de 2012

Page 14: Testes Rápidos

Tempo da 2º Solução

⤷ time rspec spec/unit_test.rbreal 0m0.476suser0m0.352ssys 0m0.121s

quinta-feira, 3 de maio de 2012

Page 15: Testes Rápidos

Execução

quinta-feira, 3 de maio de 2012

Page 16: Testes Rápidos

Execução - Cada caso é diferente. Mas evite bater no Banco de Dados.

quinta-feira, 3 de maio de 2012

Page 17: Testes Rápidos

Execução - Minha Dica: Se não precisa, não crie registros no Banco de Dados. Pense em cada

caso.

quinta-feira, 3 de maio de 2012

Page 18: Testes Rápidos

Execução - Exemplo do Gateway

class Account < ActiveRecord::Base def disable_show_first_steps update_attributes!(:show_first_steps => false) endend

quinta-feira, 3 de maio de 2012

Page 19: Testes Rápidos

Execução - Exemplo do Gateway

require ‘model_test’describe Account do describe ‘#disable_show_first_steps’ do it ‘#should disable first steps on database’ do subject.stub(:update_attributes!).with(:show_first_steps => false) subject.disable_show_first_steps end endend

quinta-feira, 3 de maio de 2012

Page 20: Testes Rápidos

Testes de Integração

# encoding: utf-8require ‘integration_test’describe ‘Interface Accounts’ do it ‘should not show first steps if click Dont show first steps again’ do sign_in visit root_path page.should have_content(‘Primeiros Passos ... ... ...’) click ‘Não exibir novamente’ page.should have_content(‘Caso queira ver de novo ... ... ...’) page.should_not have_content(‘Primeiros Passos ... ... ...’) endend

quinta-feira, 3 de maio de 2012

Page 21: Testes Rápidos

Testes de Integração - Lentos :\

quinta-feira, 3 de maio de 2012

Page 22: Testes Rápidos

Obrigado :)

quinta-feira, 3 de maio de 2012