Testes Rápidos
Click here to load reader
-
Upload
successoft-ltda -
Category
Technology
-
view
183 -
download
3
description
Transcript of Testes Rápidos
Testes Rápidos Tomás D’Stefano @tomas_stefano
quinta-feira, 3 de maio de 2012
DiscussãoBoot e Execução
quinta-feira, 3 de maio de 2012
Boot da app
quinta-feira, 3 de maio de 2012
Single Responsability Principle
Nunca deve existir mais de uma razão para que uma classe mude.
quinta-feira, 3 de maio de 2012
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
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
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
Necessário?
⤷ time rspec spec/spec_helper.rb real 0m8.194suser0m7.802ssys 0m1.391s
quinta-feira, 3 de maio de 2012
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
Tempo da 1º Solução
⤷ time rspec spec/unit_test.rbreal 0m0.681suser0m0.544ssys 0m0.138s
quinta-feira, 3 de maio de 2012
Desvantagem
require na mão! :\
quinta-feira, 3 de maio de 2012
2º Solução - ActiveSupport::Dependencies
quinta-feira, 3 de maio de 2012
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
Tempo da 2º Solução
⤷ time rspec spec/unit_test.rbreal 0m0.476suser0m0.352ssys 0m0.121s
quinta-feira, 3 de maio de 2012
Execução
quinta-feira, 3 de maio de 2012
Execução - Cada caso é diferente. Mas evite bater no Banco de Dados.
quinta-feira, 3 de maio de 2012
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
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
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
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
Testes de Integração - Lentos :\
quinta-feira, 3 de maio de 2012
Obrigado :)
quinta-feira, 3 de maio de 2012