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


121

Le contexte: j'ai quelques problèmes avec la gemme "Factory Girl" de Thoughtbot, qui sert à créer des objets à utiliser dans des tests unitaires et autres. J'aimerais accéder à la console et lancer différents appels Factory Girl pour voir ce qui se passe. Par exemple, j'aimerais aller là-dedans, faire ...

>> 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 cela, la classe Factory n'est pas disponible. Il semble test_helper.rbne pas être chargé.

J'ai essayé divers requireappels, dont un avec le chemin absolu vers, test_helper.rbmais ils échouent de la même manière:

$ 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.


1
Par conséquent, si vous aviez placé le test RAILS_ENV = avant le script / la console, cela aurait fonctionné comme prévu.
Jared

Réponses:


192

Pour les rails <3.0

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

Je ne sais pas si vous devez avoir besoin de l'assistant de test ou si l'environnement de test le fait pour vous, mais avec cette commande, vous devriez au moins pouvoir démarrer avec succès dans l'environnement de test.

En guise de remarque: il est en effet assez étrange que les différents binaires du script / aient différentes façons de définir l'environnement rails.

Pour les rails 3 et 4

Courez rails c test. Ajoutez bundle execsi vous en avez besoin pour l'environnement actuel de l'application.

Pour les rails 5 et 6

Courez rails console -e test.


63
Dans les rails 3, c'est justerails console [environment]
Idris Mokhtarzada

26
C'est un peu incohérent car pour démarrer le serveur que vous tapezrails server -e test
Jason

Dans Rails 5, cela fonctionne toujours. Et, vous devez charger au moins certaines parties de votre environnement - dans mon cas, il features/support/helpers.rbn'a pas été chargé automatiquement. De plus, Rack::Testn'est pas chargé.
Derrell Durrett

61

Dans Rails 3, faites simplement rails console testou rails console productionou rails console development(qui est la valeur par défaut).


10
script/console test

Cela devrait être tout ce dont vous avez besoin.


8

Pour Rails 5.2.0: "Passer le nom de l'environnement comme argument normal est obsolète et sera supprimé dans la prochaine version de Rails. Veuillez utiliser plutôt l'option -e."

rails c -e test

4

Vous pouvez spécifier l'environnement dans lequel la commande de console doit fonctionner.

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 la description détaillée: La ligne de commande Rails


3

David Smith a raison, fais juste

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 bit [environnement] .


2

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émarrer la console dans l'environnement de test?

    Pour les versions récentes de Rails bundle exec rails c test, ou d'autres syntaxes pour cela.

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

    Quelque chose comme ça require './test/test_helper'devrait le faire.

    Pour moi, cela renvoie true, indiquant qu'il n'était pas déjà chargé lorsque j'ai démarré la console. Si cette déclaration renvoie false, vous venez de perdre quelques frappes, mais vous êtes toujours prêt à partir.

  3. Une fois test_helper chargé, comment appeler les méthodes qui y sont définies?

    Dans un test_helper typique, les méthodes personnalisées sont généralement définies comme des méthodes d'instance d'ActiveSupport :: TestCase. Donc, si vous voulez en appeler l'un, vous avez besoin d'une instance de cette classe. Par essais et erreurs, ActiveSupport :: TestCase.new a un paramètre obligatoire, alors ... 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


Plutôt qu'un essai ou une erreur - utilisez le guide de l'API rails pour trouver ce dont il a besoin api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... c'est probablement une commande de test qui est :randompar défaut
Mirv - Matt

Il n'y a que ces deux méthodes de classe décrites pour ActiveSupport :: TestCase, donc je ne sais pas de quelle classe / module il hérite de sa initializeméthode. Mais il semble que le paramètre auquel il s'attend soit stocké comme @NAMEsur l'objet créé.
Nick Davies

1

Assurez-vous que vous avez installé le 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"

0

Test Env

rails console test # or just rails c test

Développement Env

rails console # or just rails c

0

La commande pour exécuter l'environnement de test de la console des rails est

rails c -e test

ou

RAILS_ENV=test rails c

si vous rencontrez un problème comme

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

Ensuite, vous devez d'abord préparer votre base de données de test en exécutant

bundle exec rake db:test:prepare
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.