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.


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.


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ą).



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

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


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


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


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"

0

Test Env

rails console test # or just rails c test

Developement Env

rails console # or just rails c

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.