Как запустить консоль Rails в тестовой среде и загрузить test_helper.rb? - PullRequest
117 голосов
/ 26 июня 2009

Предыстория: у меня возникли некоторые проблемы с драгоценным камнем Thoughtbot "Factory Girl", который используется для создания объектов для использования в модуле и других тестах. Я хотел бы пойти к консоли и выполнить различные звонки Factory Girl, чтобы проверить, что происходит. Например, я хотел бы пойти туда сделать ...

>> Factory(:user).inspect

Я знаю, что вы можете запустить консоль в разных средах ...

$ script / console RAILS_ENV = test

Но когда я это делаю, класс Factory недоступен. Похоже, test_helper.rb не загружается.

Я пробовал различные require вызовы, в том числе один с абсолютным путем к test_helper.rb, но они не схожи с этим:

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

Ответы [ 10 ]

177 голосов
/ 26 июня 2009

Для рельсов <3.0 </strong>

Выполнить script/console --help. Вы заметите, что синтаксис script/console [environment], который в вашем случае script/console test.

Я не уверен, требуется ли вам тестовый помощник или тестовая среда делает это для вас, но с этой командой вы, по крайней мере, сможете успешно загрузиться в тестовую среду.

Как примечание: действительно странно, что различные двоичные файлы в скрипте / имеют разные способы настройки среды rails.

Для рельсов 3 и 4

Выполнить rails c test. Добавьте bundle exec, если вам это нужно для текущей среды приложения.

Для рельсов 5 и 6

Выполнить rails console -e test.

61 голосов
/ 09 июля 2011

В Rails 3 просто выполните rails console test или rails console production или rails console development (по умолчанию).

10 голосов
/ 26 июня 2009
script/console test

Должно быть все, что вам нужно.

8 голосов
/ 03 ноября 2018

Для Rails 5.2.0: «Передача имени среды в качестве обычного аргумента устарела и будет удалена в следующей версии Rails. Вместо этого используйте параметр -e.»

rails c -e test
4 голосов
/ 19 сентября 2016

Вы можете указать среду, в которой должна работать консольная команда.

rails c [environment]

Примеры

1) Для постановки

rails c staging

2) Для производства

rails c production

Для источника и подробного описания: Командная строка Rails

3 голосов
/ 09 февраля 2011

Дэвид Смит прав, просто сделайте

script/console test

Команда справки покажет, почему это работает:

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

Это [среда] бит.

2 голосов
/ 19 мая 2017

Я разделяю боль спрашивающего. Здесь действительно три отдельных вопроса, некоторые из которых адресованы, а некоторые нет:

  1. Как запустить консоль в тестовой среде?

    Для последних версий Rails, bundle exec rails c test или альтернативных синтаксисов для этого.

  2. Как убедиться, что test / test_helper.rb загружен в этот сеанс консоли?

    Что-то вроде require './test/test_helper' должно это сделать.

    Для меня это возвращает true, указывая, что он еще не был загружен, когда я запустил консоль. Если это утверждение возвращает ложь, то вы просто потратили несколько нажатий клавиш, но все еще хорошо.

  3. Как только test_helper загружен, как вы вызываете методы, определенные в нем?

    В типичном test_helper пользовательские методы обычно определяются как методы экземпляра ActiveSupport :: TestCase. Так что если вы хотите вызвать один из них, вам нужен экземпляр этого класса. Методом проб и ошибок ActiveSupport :: TestCase.new имеет один обязательный параметр, так что ... передайте ему что-нибудь.

    Если у вашего test_helper есть метод create_user, вы можете вызвать его следующим образом: ActiveSupport::TestCase.new("no idea what this is for").create_user

1 голос
/ 26 июня 2009

Убедитесь, что вы установили GEM и добавили следующую строку в файл environment.rb или test.rb.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
0 голосов
/ 18 апреля 2019

Команда для запуска среды тестирования консоли rails:

rails c -e test

или

RAILS_ENV=test rails c

если вы столкнулись с проблемой что-то вроде

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

тогда вам сначала нужно подготовить тестовую базу данных, запустив

bundle exec rake db:test:prepare
0 голосов
/ 14 апреля 2016

Test Env

rails console test # or just rails c test

Разработка Env

rails console # or just rails c
...