Pergunta

Eu tenho uma série de tarefas rake em um Rakefile que eu gostaria de teste como parte do meu especificações etc. Cada tarefa é definida no formulário:

task :do_somthing => :environment do
  # Do something with the database here
end

Onde: meio ambiente de tarefas estabelece uma conexão com o banco ActiveRecord / DataMapper e classes. Eu não estou usando isso como parte do Rails, mas eu tenho uma série de testes que eu gosto de ser executado como parte de BDD.

Este trecho ilustra como eu estou tentando testar as tarefas rake.

def setup
  @rake = Rake::Application.new
  Rake.application = @rake
  load File.dirname(__FILE__) + '/../../tasks/do_something.rake'
end

should "import data" do
  @rake["do_something"].invoke
  assert something_in_the_database
end

Então, o meu pedido de ajuda - é possível sobrepor-se a: tarefa Ambiente no meu arquivo test_helper.rb então eu meus interage teste de rake com o meu banco de dados de teste, ao invés de produção? Eu tentei redefinir a tarefa no arquivo auxiliar, mas isso não funciona.

Qualquer ajuda para uma solução seria ótimo, como eu estive preso neste para a semana passada.

Foi útil?

Solução

O meu "solução" para um problema semelhante foi extrair toda a lógica dos meus arquivos .rake e criar classes para executar as tarefas, deixando apenas uma chamada de uma linha no arquivo de rake, o que eu senti confiante em não testar também Difícil. As classes podem então ser testados praticamente normalmente.

Eu não sei o quão bem isso iria levantar-se para um complexo conjunto de tarefas interdependentes que mantêm um estado de grande alcance: provavelmente não bem, mas mais uma vez que seria mais provável ser uma indicação de algum outro problema de projeto .. .

Estou curioso para ver se eu perdi alguma coisa melhor.

EDIT: Costumava haver um post aqui que (a) diz a mesma coisa e (b) diz melhor. Parece que ele disse primeiro, também.

Outras dicas

Eu acho que você está procurando esta linha: require (File.join (RAILS_ROOT, 'config', 'meio ambiente')) é exatamente o que você encontra em "tarefa: ambiente" implementação

Eu usá-lo para testar minhas tarefas rake usando rspec

quando você está executando ambiente testes é que está a ser carregado é de teste.

para que você está interagindo com teste único banco de dados.

Então, eu não vejo nenhuma razão para anular a sua tarefa rake em test_helper.rb

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top