web-dev-qa-db-fra.com

Comment exécuter la console Rails dans l'environnement de test et charger test_helper.rb?

Le fond: Je rencontre quelques problèmes avec la gemme "Factory Girl" de Thoughtbot, qui est utilisée pour créer des objets à utiliser dans des tests unitaires ou autres. J'aimerais aller à la console et lancer différents appels Factory Girl pour vérifier ce qui se passe. Par exemple, j'aimerais bien y aller….

>> Factory(:user).inspect

Je sais que vous pouvez exécuter la console dans différents environnements ...

$ script/console Rails_ENV = test

Mais quand je fais ça, la classe Usine n'est pas disponible. Il semble que test_helper.rb ne se charge pas.

J'ai essayé divers appels require dont un avec le chemin absolu vers test_helper.rb mais ils échouent de la même façon:

$ script/console Rails_ENV=test
>> require '/Users/ethan/project/contactdb/test/test_helper.rb'
  Errno::ENOENT: No such file or directory - 
  /Users/ethan/project/contactdb/config/environments/Rails_ENV=test.rb

Grr. Argh.

117
Ethan

Pour Rails <3.

Courir script/console --help. Vous remarquerez que la syntaxe est script/console [environment], qui dans votre cas est script/console test.

Je ne sais pas si vous avez besoin de l'aide de test ou si l'environnement de test le fait pour vous, mais avec cette commande, vous devriez au moins pouvoir démarrer correctement dans l'environnement de test.

Sidenote: Il est en effet assez étrange que les différents fichiers binaires du script/disposent de différentes façons de définir l’environnement Rails.

Pour Rails 3 et 4

Courir Rails c test. Préfini bundle exec _ si vous en avez besoin pour l'environnement actuel de l'application.

Pour Rails 5 et 6

Courir Rails console -e test.

178
August Lilleaas

Dans Rails 3, il suffit de faire Rails console test ou Rails console production ou Rails console development (qui est la valeur par défaut).

61
sivabudh
script/console test

Devrait être tout ce dont vous avez besoin.

10
David Smith

Pour Rails 5.2.0: "Passer le nom de l'environnement en argument standard est obsolète et sera supprimé de la prochaine Rails version. Utilisez le - e option à la place. "

Rails c -e test
8
Tovi Newman

Vous pouvez spécifier l'environnement dans lequel la commande de console doit être exécutée.

Rails c [environment]

Exemples

1) Pour la mise en scène

Rails c staging

2) pour la production

Rails c production

Pour la source et une description détaillée: La Rails Ligne de commande

4
Aamir

David Smith a raison, il suffit de faire

script/console test

La commande help montrera pourquoi cela fonctionne:

$ script/console -h
Usage: console [environment] [options]
    -s, --sandbox                    Rollback database modifications on exit.
        --irb=[irb]                  Invoke a different irb.
        --debugger                   Enable Ruby-debugging for the console.

C'est le [environnement] bit.

3
Purplejacket

Je partage la douleur du demandeur. Il y a vraiment trois questions distinctes ici, dont certaines sont abordées, d'autres non:

  1. Comment démarrez-vous la console dans l'environnement de test?

    Pour les versions Rails récentes, bundle exec Rails c test] Récentes ou alternatives, pour cela.

  2. Comment vous assurez-vous que test/test_helper.rb est chargé dans cette session de console?

    Quelque chose comme require './test/test_helper' Devrait le faire.

    Pour moi, cela retourne true, ce qui indique qu'il n'était pas déjà chargé lorsque j'ai démarré la console. Si cette déclaration renvoie false, vous avez simplement perdu quelques frappes au clavier, mais vous êtes toujours prêt.

  3. Une fois que test_helper est chargé, comment appelez-vous les méthodes qui y sont définies?

    Dans un test_helper typique, les méthodes personnalisées sont généralement définies en tant que méthodes d'instance de ActiveSupport :: TestCase. Donc, si vous voulez appeler l'un d'eux, vous avez besoin d'une instance de cette classe. Par essais et erreurs, ActiveSupport :: TestCase.new a un paramètre obligatoire, donc ... transmettez-lui quelque chose.

    Si votre test_helper a une méthode appelée create_user, vous pouvez l'invoquer de cette façon: ActiveSupport::TestCase.new("no idea what this is for").create_user

2
Nick Davies

Assurez-vous que vous avez installé le fichier GEM et que vous avez ajouté la ligne suivante dans votre fichier environment.rb ou test.rb.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
1
Simone Carletti

Test Env

Rails console test # or just Rails c test

Développement Env

Rails console # or just Rails c
0
anyavacy

Commande à exécuter Rails est

Rails c -e test

ou

Rails_ENV=test Rails c

si vous faites face à un problème quelque chose comme

ActiveRecord::StatementInvalid:
   Mysql2::Error: Table 'DB_test.users' doesn't exist: SHOW FULL FIELDS FROM `users`

alors vous devriez d'abord préparer votre base de test en exécutant

bundle exec rake db:test:prepare
0
Touseef Murtaza