Domanda

ho una serie di compiti rastrello in un Rakefile che mi piacerebbe mettere alla prova come parte del mio spec ecc Ogni attività è definito nella forma:

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

Quando il: compito ambiente stabilisce una connessione di database ActiveRecord / DataMapper e classi. Non sto usando questo come parte di Rails, ma ho una serie di test che mi piace correre come parte di BDD.

Questo frammento di codice illustra come sto cercando di testare i compiti 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

Quindi la mia richiesta di aiuto - è possibile a un eccesso di cavalcare il: compito ambiente nel mio file test_helper.rb così ho il mio test rastrello interagisce con il mio database di prova, piuttosto che la produzione? Ho provato ridefinire il compito nel file helper, ma questo non funziona.

Qualsiasi aiuto di una soluzione sarebbe grande, come ho bloccato su questo per la settimana passata.

È stato utile?

Soluzione

La mia "soluzione" ad un problema simile è stato quello di estrarre tutta la logica dal mio file .rake e creare classi per svolgere i compiti, lasciando solo una chiamata di una riga nel file rastrello, che ho sentito fiducioso a non testare troppo difficile. Le classi possono poi essere testati praticamente normalmente.

Non so quanto bene questo sarebbe resistere a un complesso insieme di attività interdipendenti che mantengono uno stato di vasta portata: probabilmente non bene, ma poi di nuovo che sarebbe molto probabilmente essere un'indicazione di qualche altro problema di progettazione .. .

Sono curioso di vedere se ho perso qualcosa di meglio.

EDIT: Ci deve essere utilizzato un post sul blog qui che (a) dice la stessa cosa e (b) lo dice meglio. Sembra che lo ha detto prima, anche.

Altri suggerimenti

Credo che si sta cercando per questa linea: require (File.join (RAILS_ROOT, 'config', 'ambiente')) è esattamente quello che si trova in "compito: l'ambiente" implementazione

Io lo uso per testare i miei compiti rake usando rspec

Quando si esegue l'ambiente test è che viene caricato è di prova.

  

così si interagisce con la prova   unico database.

Quindi, io non vedo alcun motivo per ignorare il vostro compito rastrello in test_helper.rb

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top