2010-05-11 5 views
3

Je tente de charger des rails dans l'environnement de test en utilisant un script ruby. J'ai essayé googler un peu et trouvé cette recommandation:Rails de démarrage dans l'environnement de test

require "../../config/environment" 
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test' 

Cela semble charger mon environnement bien, mais ma base de données de développement est encore utilisé. Est-ce que je fais quelque chose de mal?

Voici mon fichier database.yml ... mais je ne pense pas que ce soit la question

development: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_development 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

# Warning: The database defined as "test" will be erased and 
# re-generated from your development database when you run "rake". 
# Do not set this db to the same as development or production. 
test: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_test 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

production: 
    adapter: mysql 
    encoding: utf8 
    reconnect: false 
    database: BrianSite_production 
    pool: 5 
    username: root 
    password: dev 
    host: localhost 

Je ne peux pas utiliser

ruby script/server -e test 

parce que je suis en train de courir code ruby ​​après je charge les rails. Plus précisément, ce que j'essaie de faire est: exécuter un script de base de données .sql, charger des rails et ensuite exécuter des tests automatisés. Tout semble fonctionner correctement, mais pour une raison quelconque, les rails semblent se charger dans l'environnement de développement au lieu de l'environnement de test.

Voici une version abrégée du code que je suis en train de courir:

system "execute mysql script here" 

require "../../config/environment" 
ENV['RAILS_ENV'] = ARGV.first || ENV['RAILS_ENV'] || 'test' 

describe Blog do 
    it "should be initialized successfully" do 
    blog = Blog.new 
    end 
end 

Je ne ai pas besoin de démarrer un serveur, j'ai juste besoin de charger mes rails base de code (modèles, contrôleurs, etc. ..) afin que je puisse exécuter des tests sur mon code.

Merci pour toute aide.

MISE À JOUR:

J'ai mon environnement rails de chargement maintenant. Maintenant, j'essaie d'exécuter mes fichiers de test dans ma tâche de rake. Voici mon code:

require"spec" 
require "spec/rake/spectask" 
RAILS_ENV = 'test' 

namespace :run_all_tests do 
    desc "Run all of your tests" 

    puts "Reseting test database..." 
    system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\BrianSite_test_CreateScript.sql" 
    puts "Filling database tables with test data..." 
    system "mysql --user=root --password=dev < C:\\Brian\\Work\\Personal\\BrianSite\\database\\Fill_Test_Tables.sql" 

    puts "Starting rails test environment..." 
    task :run => :environment do 
    puts "RAILS_ENV is #{RAILS_ENV}" 
    require "spec/models/blog_spec.rb" 
    end 
end 

Je pensais que le besoin fichier « spécifications/modèles/blog_spec.rb » le ferait, mais il ne semble pas exécuter les tests ...

Merci pour la aider jusqu'à présent.

+0

montrez votre config/base de données.Fichier yml – fl00r

+0

Ok, je n'ai pas compris le problème exact. Vous pouvez essayer de spécifier 'ENV [" RAILS_ENV "] =" test "nécessite File.expand_path ('../../ config/environment', __FILE __)' clairement – fl00r

Répondre

6

Vous savez que vous pouvez exécuter vos tests unitaires, fonctionnels et d'intégration de Rake, n'est-ce pas? Découvrez la sortie de rake -T test pour voir comment. Si vous avez besoin de quelque chose de plus personnalisé, vous pouvez créer votre propre tâche Rake. Mettez quelque chose comme cela dans un fichier lib/tasks:

namespace :custom_tests do 
    desc "Run my custom tests" 
    task :run => :environment do 
    puts "RAILS_ENV is #{RAILS_ENV}" 
    system "execute mysql script here" 
    # Do whatever you need to do 
    end 
end 

Les charges => :environment l'environnement actuel pour vous. Ensuite, vous pouvez exécuter votre tâche dans l'environnement de test comme ceci: RAILS_ENV=test rake custom_tests:run

+0

Un grand merci! Je suis assez nouveau pour rubis et rails et ne connaissais pas les capacités de râteau. Maintenant, j'essaie juste d'exécuter mes fichiers de test dans cette tâche rake. J'ai mis à jour ma question avec mon code actuel. Merci encore pour votre aide. –

+0

Oh! Si vous utilisez Rspec, vous devriez consulter le plugin rspec-rails (http://wiki.github.com/dchelimsky/rspec/rails). Il vous donnera beaucoup de méthodes d'aide liées à Rails. En outre, il vous donnera une tâche Rake pour exécuter toutes vos spécifications (rake spec). Vous pouvez également consulter les screencasts Peepcode sur Rspec (http://peepcode.com/products/rspec-basics). Je les ai trouvés très utiles pour me lancer. À la votre! – agregoire

+0

J'ai regardé le plugin rspec-rails mais cela nécessite que vous utilisiez des migrations, ce que je ne suis pas. C'est pourquoi j'ai eu la peine de lancer des scripts mysql, etc. avant de lancer mes tests. –

9

pour commencer environnement de test, vous devez exécuter le script/serveur avec -e param:

ruby script/server -e test 

et dans votre config/database.yml doit être defenition de test de base de données env, à savoir:

test: 
    adapter: sqlite3 
    database: db/test.sqlite3 
    pool: 5 
    timeout: 5000 
27

Cette commande l'a fait pour moi. J'ai pu charger le test env aloong avec sa base de données.

$rails s -e test 
Questions connexes