Puis-je remplacer tâche: environnement test_helper.rb pour tester les tâches de râteau?

StackOverflow https://stackoverflow.com/questions/925407

  •  06-09-2019
  •  | 
  •  

Question

J'ai une série de tâches de râteau dans un Rakefile que je voudrais tester dans le cadre de mes spécifications etc. Chaque tâche est définie sous la forme:

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

Lorsque la: tâche de l'environnement met en place une connexion de base de données ActiveRecord / DataMapper et classes. Je ne suis pas en utilisant ce dans le cadre de Rails mais j'ai une série de tests que j'aime courir dans le cadre de la BDD.

Cet extrait illustre comment je suis en train de tester les tâches de râteau.

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

Donc, ma demande d'aide - est-il possible de l'emporter sur la: tâche de l'environnement dans mon dossier de test_helper.rb donc je mes tests de coupe interagit avec la base de données de mon test, plutôt que la production? J'ai essayé de redéfinir la tâche dans le fichier d'aide, mais cela ne fonctionne pas.

Toute aide d'une solution serait génial, comme je l'ai été coincé là-dessus depuis la semaine dernière.

Était-ce utile?

La solution

Ma « solution » à un problème similaire était d'extraire toute la logique de mes fichiers .rake et créer des classes pour effectuer les tâches, laissant juste un appel d'une ligne dans le fichier de coupe, que je me sentais confiant à ne pas tester aussi dur. Les cours pourraient alors être testées à peu près normalement.

Je ne sais pas à quel point ce serait résister à un ensemble complexe de tâches interdépendantes qui maintiennent une grande portée État: ce serait très probablement probablement pas bien, mais là encore une indication d'un autre problème de conception .. .

Je suis curieux de voir si je l'ai raté quelque chose de mieux.

EDIT: Il y avait un billet de blog ici (a) dit la même chose et (b) dit mieux. On dirait qu'il a dit d'abord, aussi.

Autres conseils

Je pense que vous êtes à la recherche de cette ligne: require (File.join (RAILS_ROOT, 'environnement' 'config',)) c'est exactement ce que vous trouvez dans « tâche: environnement » mise en œuvre

Je l'utilise pour tester mes tâches de râteau à l'aide rspec

lorsque vous exécutez environnement des tests est en cours de chargement qui est test.

  

donc vous interagissez avec le test   base de données uniquement.

Alors je ne vois aucune raison de passer outre votre tâche de râteau dans test_helper.rb

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top