Um "setup" global para todas as suas specs

Ficou bem difundido no rspec a forma em como fazer o setup antes das specs executarem, assim como existe também no Test::Unit.

describe Act do
  before(:each) do
    (...)
  end

  it "should have many persons associated" do
   (...)
  end
end

Eu estava precisando fazer o setup para todas as minhas specs (do planeta :), então descobri uma forma que está mal documentada(pelo menos eu não achei bom), mas é super simples de usar. É só editar o spec/spec_helper.rb e adicionar dentro do bloco:

Spec::Runner.configure do |config|
  (...)
end

O seguinte:

config.before(:each) do
  your_global_setup_here
end

Você também pode executar o setup somente para os controllers, models ou helpers assim:

config.before(:each, :behaviour_type => :controller) do
  your_global_controllers_setup_here
end

Ou

config.before(:each, :behaviour_type => :helper) do
  your_global_helpers_setup_here
end

Ou

config.before(:each, :behaviour_type => :model) do
  your_global_models_setup_here
end

Como se chama o “setup” no bdd? É setup mesmo?

27.11.2008 02:50 AM

4 Responses to “Um "setup" global para todas as suas specs”

  1. Eduardo Rocha Says:

    Qual setup que você queria compartilhar entre todos os métodos?

  2. daniel lopes Says:

    Também gostaria de saber qual a situação que vc queria compartilhar algo no aplicativo inteiro.

  3. Sylvestre Mergulhão Says:

    No projeto que estou trabalhando(O V2V, que você começou Eduardo) uma mesma aplicação vai atender diversos domínios. Os conteúdos são diferentes para cada domínio, o que pertende a um site não pode aparecer no outro. A forma de distinguir qual site será apresentado é o domínio. Pelo domínio eu busco no banco qual portal responde por aquele domínio. Se não existe um portal com aquele domínio, é apresentado um 404.

    A forma que eu conheço de saber o domínio é pela variável request.env[‘SERVER_NAME’]. Ela vem como nil nos specs de controller, então qualquer teste de controller que eu fizesse seria redirecionado para 404 caso eu não utilizasse isso no spec_helper:

    def stub_domain!
      request.env['SERVER_NAME'] = 'example.com'
    end
    config.before(:each, :behaviour_type => :controller) do
      stub_domain!
    end

    Nas minhas fixtures eu tenho um portal cadastrado com o domínio example.com. Não sei se essa é a melhor forma de fazer, se souberem de uma melhor eu também quero saber como é! :)

    Eduardo, no começo de novembro migramos a primeira empresa para o novo V2V, a Rede Social São Paulo. No começo de dezembro iremos migrar o Portal do Voluntário inteiro.

  4. Eduardo Rocha Says:

    Acho que é isso aí mesmo! Show de bola!

Deixe seu comentário