Wie führe ich die Rails-Konsole in der Testumgebung aus und lade test_helper.rb?

121

Der Hintergrund: Ich habe einige Probleme mit Thoughtbots "Factory Girl" -Edelstein, mit dem Objekte erstellt werden, die in Einheiten- und anderen Tests verwendet werden sollen. Ich möchte zur Konsole gehen und verschiedene Factory Girl-Anrufe ausführen, um herauszufinden, was passiert. Zum Beispiel würde ich gerne da reingehen ...

>> Factory(:user).inspect

Ich weiß, dass Sie die Konsole in verschiedenen Umgebungen ausführen können ...

$ script / console RAILS_ENV = test

Aber wenn ich das mache, ist die Factory-Klasse nicht verfügbar. Es sieht so aus, als würde test_helper.rbes nicht geladen.

Ich habe verschiedene requireAnrufe ausprobiert, darunter einen mit dem absoluten Pfad zu, test_helper.rbaber sie schlagen ähnlich fehl:

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

Ethan
quelle
1
Wenn Sie also den RAILS_ENV = -Test vor das Skript / die Konsole gestellt hätten, hätte dies wie erwartet funktioniert.
Jared

Antworten:

192

Für Schienen <3.0

Ausführen script/console --help. Sie werden feststellen, dass die Syntax script/console [environment]wie in Ihrem Fall lautet script/console test.

Ich bin nicht sicher, ob Sie den Testhelfer benötigen oder ob die Testumgebung dies für Sie erledigt, aber mit diesem Befehl sollten Sie zumindest in der Lage sein, die Testumgebung erfolgreich zu starten.

Als Nebenbemerkung: Es ist in der Tat seltsam, dass die verschiedenen Binärdateien im Skript / unterschiedliche Möglichkeiten zum Festlegen der Rails-Umgebung haben.

Für Schienen 3 und 4

Ausführen rails c test. Stellen bundle execSie vor, wenn Sie dies für die aktuelle App-Umgebung benötigen.

Für Schienen 5 und 6

Ausführen rails console -e test.

August Lilleaas
quelle
63
In Schienen 3 ist es nurrails console [environment]
Idris Mokhtarzada
26
Es ist ein wenig inkonsistent, weil, um den Server zu starten, den Sie eingebenrails server -e test
Jason
In Rails 5 funktioniert dies immer noch. Und Sie müssen mindestens einige Teile Ihrer Umgebung laden - in meinem Fall features/support/helpers.rbwurde sie nicht automatisch geladen. Auch Rack::Testist nicht geladen.
Derrell Durrett
61

Tun Sie in Rails 3 einfach rails console testoder rails console productionoder rails console development(was die Standardeinstellung ist).

Sivabudh
quelle
10
script/console test

Sollte alles sein, was Sie brauchen.

David Smith
quelle
8

Für Rails 5.2.0: "Die Übergabe des Umgebungsnamens als reguläres Argument ist veraltet und wird in der nächsten Rails-Version entfernt. Verwenden Sie stattdessen die Option -e."

rails c -e test
Tovi Newman
quelle
4

Sie können die Umgebung angeben, in der der Konsolenbefehl ausgeführt werden soll.

rails c [environment]

Beispiele

1) Für die Inszenierung

rails c staging

2) Für die Produktion

rails c production

Für Quelle und detaillierte Beschreibung: Die Rails-Befehlszeile

Aamir
quelle
3

David Smith ist richtig, tun Sie es einfach

script/console test

Der Hilfebefehl zeigt, warum dies funktioniert:

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

Es ist das [Umwelt-] Bit.

Lila Jacke
quelle
2

Ich teile den Schmerz des Fragestellers. Hier gibt es wirklich drei verschiedene Fragen, von denen einige angesprochen werden, andere nicht:

  1. Wie starte ich die Konsole in der Testumgebung?

    Für neuere Rails-Versionen bundle exec rails c testoder alternative Syntaxen dafür.

  2. Wie stellen Sie sicher, dass test / test_helper.rb in diese Konsolensitzung geladen wird?

    So etwas require './test/test_helper'sollte es tun.

    Für mich gibt dies true zurück, was darauf hinweist, dass es beim Starten der Konsole noch nicht geladen war. Wenn diese Anweisung false zurückgibt, haben Sie nur ein paar Tastenanschläge verschwendet, aber Sie können trotzdem loslegen.

  3. Wie rufen Sie nach dem Laden von test_helper die darin definierten Methoden auf?

    In einem typischen test_helper werden die benutzerdefinierten Methoden normalerweise als Instanzmethoden von ActiveSupport :: TestCase definiert. Wenn Sie also einen von ihnen aufrufen möchten, benötigen Sie eine Instanz dieser Klasse. ActiveSupport :: TestCase.new hat durch Ausprobieren einen erforderlichen Parameter, also ... übergeben Sie ihm etwas.

    Wenn Ihr test_helper eine Methode namens create_user hat, können Sie diese folgendermaßen aufrufen: ActiveSupport::TestCase.new("no idea what this is for").create_user

Nick Davies
quelle
Anstatt Versuch oder Fehler - verwenden die API Führungsschienen , was zu finden , es braucht api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... es ist wahrscheinlich Prüfauftrag das ist :randomstandardmäßig
Mirv - Matt
Es gibt nur diese beiden Klassenmethoden, die für ActiveSupport :: TestCase beschrieben wurden. Daher ist mir nicht klar, von welcher Klasse / welchem ​​Modul die initializeMethode geerbt wird . Es sieht jedoch so aus, als würde der erwartete Parameter wie @NAMEauf dem erstellten Objekt gespeichert .
Nick Davies
1

Stellen Sie sicher, dass Sie das GEM installiert und die folgende Zeile entweder in Ihrer Datei environment.rb oder test.rb hinzugefügt haben.

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

Test Env

rails console test # or just rails c test

Entwicklung Env

rails console # or just rails c
Anyavacy
quelle
0

Befehl zum Ausführen der Rails-Konsolentestumgebung lautet

rails c -e test

oder

RAILS_ENV=test rails c

wenn Sie vor einem Problem stehen

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

Dann sollten Sie zuerst Ihre Test-DB vorbereiten, indem Sie ausführen

bundle exec rake db:test:prepare
Touseef Murtaza
quelle