Jak uruchomić konsolę Rails w środowisku testowym i załadować plik test_helper.rb?

121

Tło: Mam pewne problemy z klejnotem Thoughtbota „Factory Girl”, który służy do tworzenia obiektów do wykorzystania w testach jednostkowych i innych. Chciałbym podejść do konsoli i przeprowadzić różne rozmowy z Factory Girl, aby sprawdzić, co się dzieje. Na przykład chciałbym tam wejść, są ...

>> Factory(:user).inspect

Wiem, że możesz uruchomić konsolę w różnych środowiskach ...

$ script / console RAILS_ENV = test

Ale kiedy to robię, klasa Factory nie jest dostępna. Wygląda na test_helper.rbto, że się nie ładuje.

Próbowałem różnych requirepołączeń, w tym jednego z absolutną ścieżką do, test_helper.rbale zawodzą podobnie do tego:

$ 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
źródło
1
W konsekwencji, gdybyś umieścił test RAILS_ENV = przed skryptem / konsolą, zadziałałby tak, jak można się spodziewać.
Jared

Odpowiedzi:

192

Dla szyn <3.0

Biegnij script/console --help. Zauważysz, że składnia to script/console [environment], co w twoim przypadku jest script/console test.

Nie jestem pewien, czy musisz wymagać pomocnika testów, czy też środowisko testowe robi to za Ciebie, ale za pomocą tego polecenia powinieneś przynajmniej być w stanie pomyślnie uruchomić się do testowego środowiska.

Na marginesie: to rzeczywiście trochę dziwne, że różne pliki binarne w skrypcie / mają różne sposoby ustawiania środowiska railsowego.

Do szyn 3 i 4

Biegnij rails c test. Uzupełnij, bundle execjeśli potrzebujesz tego w bieżącym środowisku aplikacji.

Do szyn 5 i 6

Biegnij rails console -e test.

August Lilleaas
źródło
63
W szynach 3 to po prosturails console [environment]
Idris Mokhtarzada
26
Jest to trochę niespójne, ponieważ aby uruchomić serwer, który wpisujeszrails server -e test
Jason
W Railsach 5 to nadal działa. I musisz załadować przynajmniej niektóre części swojego środowiska - w moim przypadku features/support/helpers.rbnie było ładowane automagicznie. Nie Rack::Testjest też załadowany.
Derrell Durrett
61

W Railsach 3 po prostu zrób rails console testlub rails console productionlub rails console development(co jest wartością domyślną).

sivabudh
źródło
10
script/console test

Powinno być wszystkim, czego potrzebujesz.

David Smith
źródło
8

Dla Rails 5.2.0: "Przekazywanie nazwy środowiska jako zwykłego argumentu jest przestarzałe i zostanie usunięte w następnej wersji Rails. Proszę zamiast tego użyć opcji -e."

rails c -e test
Tovi Newman
źródło
4

Możesz określić środowisko, w którym polecenie konsoli ma działać.

rails c [environment]

Przykłady

1) Do inscenizacji

rails c staging

2) Do produkcji

rails c production

Źródła i szczegółowy opis: Linia poleceń Rails

Aamir
źródło
3

David Smith ma rację, po prostu zrób

script/console test

Polecenie pomocy pokaże, dlaczego to działa:

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

To bit [środowiska] .

Purplejacket
źródło
2

Dzielę ból pytającego. Są tu naprawdę trzy oddzielne pytania, z których niektóre są odpowiedzią, a inne nie:

  1. Jak uruchomić konsolę w środowisku testowym?

    Dla najnowszych wersji Railsów bundle exec rails c testlub alternatywnych składni.

  2. Jak upewnić się, że test / test_helper.rb zostanie załadowany do tej sesji konsoli?

    Coś jak require './test/test_helper'powinno to zrobić.

    Dla mnie zwraca to prawda, wskazując, że nie został jeszcze załadowany, kiedy uruchomiłem konsolę. Jeśli to stwierdzenie zwróci fałsz, po prostu zmarnowałeś kilka naciśnięć klawiszy, ale nadal możesz działać.

  3. Po załadowaniu test_helper, jak wywołać zdefiniowane w nim metody?

    W typowym test_helper metody niestandardowe są zwykle definiowane jako metody instancji ActiveSupport :: TestCase. Więc jeśli chcesz wywołać jeden z nich, potrzebujesz instancji tej klasy. Metoda prób i błędów ActiveSupport :: TestCase.new ma jeden wymagany parametr, więc ... przekaż mu coś.

    Jeśli twój test_helper ma metodę o nazwie create_user, możesz ją wywołać w ten sposób: ActiveSupport::TestCase.new("no idea what this is for").create_user

Nick Davies
źródło
Zamiast prób czy błędów - skorzystaj z przewodnika API rails, aby znaleźć to, czego potrzebuje api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... to prawdopodobnie kolejność testów, która jest :randomdomyślna
Mirv - Matt
Istnieją tylko te dwie metody klas opisane dla ActiveSupport :: TestCase, więc nie jestem pewien, z jakiej klasy / modułu dziedziczy swoją initializemetodę. Ale wygląda na to, że parametr, którego oczekuje, zostanie zapisany tak, jak @NAMEw utworzonym obiekcie.
Nick Davies
1

Upewnij się, że zainstalowałeś GEM i dodałeś następujący wiersz w pliku environment.rb lub test.rb.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
Simone Carletti
źródło
0

Test Env

rails console test # or just rails c test

Developement Env

rails console # or just rails c
Anyavacy
źródło
0

Polecenie do uruchomienia środowiska testowego konsoli rails to

rails c -e test

lub

RAILS_ENV=test rails c

jeśli masz do czynienia z czymś takim jak problem

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

następnie powinieneś najpierw przygotować testową bazę danych, uruchamiając

bundle exec rake db:test:prepare
Touseef Murtaza
źródło