2010-12-03 6 views
0

J'ai une gemme Rails 3 qui comporte des tâches de rake qui ne doivent être exécutées que dans l'environnement de test. Courir dans d'autres environnements n'a pas vraiment de sens.Exécution automatique de tâches gem dans l'environnement de test

Mon problème est que Rake charge le système Rails afin de trouver mes tâches dans ma gemme. Donc, au moment où il arrive à mes tâches Rails est déjà chargé dans l'environnement de "développement" (ou tout autre environnement spécifié par l'utilisateur). Cela signifie pour exécuter mes tâches de rake correctement l'utilisateur doit faire:

RAILS_ENV=test rake mytask 

Depuis ma tâche de sens que dans le « test » environnement c'est ennuyeux que je préférerais l'utilisateur soit en mesure de taper simplement:

rake mytask 

Ceci est similaire à la façon dont l'essai: unités et test: prennent automatiquement le functionals environnement de test et l'utilisateur n'a pas besoin de spécifier RAILS_ENV = test à la ligne de commande. La question est donc comment puis-je modifier mon test afin que Rails bascule dans l'environnement de test?

Ma solution actuelle est:

Rails.env = 'test' 
ActionMailer::Base.delivery_method = :test 
require Rails.root.join('test/test_helper') 

Cela semble fonctionner un peu, mais il est encore à l'exploitation forestière log/development.log et je pense qu'il est en cours d'exécution encore en fait la configuration du « développement ». Quelqu'un a des idées? En regardant comment les tâches de test sont définies dans Rails lui-même ne révèle pas comment le faire que je peux voir.

https://github.com/rails/rails/blob/master/railties/lib/rails/test_unit/testing.rake

Répondre

3

MISE À JOUR: J'ai mis à jour mon code après avoir pris les entrées de la mise en œuvre d'Eric à https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2. Pour voir le code d'origine - https://stackoverflow.com/posts/4600524/revisions

desc "Do something in Test environment" 
task :example => :environment do 
    if not Rails.env.test? 
    Dir.chdir(Rails.root) do 
     system "rake example RAILS_ENV=test" 
    end 
    else 
    #.... stuff .... 
    end 
end 

Je n'ai pas vérifié l'exactitude du code, mais vous avez l'idée, non?

+0

Genius! Simple et résout un autre problème que j'avais de devoir bifurquer pour éviter une tâche de jouer avec une autre tâche. J'aurais aimé avoir quelques points pour que je puisse vous féliciter pour une excellente réponse. Je vous ai donné crédit dans le commit: https://github.com/eric1234/test_inline/commit/fe3da7efa3a2cdb7824c23cfa41697b0ceb9e8e2 –

+0

Dernier commentaire à Jamie Wong de http://stackoverflow.com/questions/3596431/element-update- est-non-une-fonction-rails-3-jquery/3611339 # 3611339 –

Questions connexes