Як запустити консоль Rails у тестовому середовищі та завантажити test_helper.rb?


121

Передумови: У мене виникають проблеми з дорогоцінним каменем Thoughtbot "Фабрична дівчина", з якого використовується для створення об'єктів для використання в одиничних та інших тестах. Я хотів би зайти до консолі та запустити різні дзвінки Factory Girl, щоб перевірити, що відбувається. Наприклад, я хотів би зайти туди роблять ...

>> Factory(:user).inspect

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

$ script / console RAILS_ENV = тест

Але коли я це роблю, клас Фабрика недоступний. Схоже, 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 Арг.


1
Отже, якби ви поставили тест RAILS_ENV = перед скриптом / консоллю, він би працював так, як ви очікували.
Джаред

Відповіді:


192

Для рейок <3.0

Біжи script/console --help. Ви помітите, що синтаксис є script/console [environment], який у вашому випадку є script/console test.

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

Як сторонне позначення: Дійсно дивним є те, що різні бінарні файли в сценарії / мають різні способи встановлення середовища рейки.

Для рейок 3 і 4

Біжи rails c test. Попередьте, bundle execякщо вам це потрібно для поточного середовища додатків.

Для рейок 5 і 6

Біжи rails console -e test.


63
У рейках 3 це простоrails console [environment]
Ідріс Мохтарзада

26
Це трохи непослідовно, тому що для запуску сервера, який ви вводитеrails server -e test
Jason

У Rails 5 це все ще працює. І вам потрібно завантажувати хоча б деякі частини вашого оточення - в моєму випадку features/support/helpers.rbне завантажувалося автоматично. Також Rack::Testне завантажується.
Деррелл Дерретт

61

У Rails 3, просто зробити rails console testабо rails console productionчи rails console development(це значення за замовчуванням).



8

Для Rails 5.2.0: "Передача імені середовища як звичайного аргументу застаріла і буде видалена в наступній версії Rails. Будь ласка, використовуйте замість цього опцію -e."

rails c -e test

4

Ви можете вказати середовище, в якому повинна працювати команда консолі.

rails c [environment]

Приклади

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

rails c staging

2) Для виробництва

rails c production

Для джерела та детальний опис: Командний рядок Rails


3

Девід Сміт правильно, просто так

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

Я ділюсь болем, що ставиться до запитувача. Тут справді є три окремих питання, деякі з яких адресовані, а деякі не:

  1. Як запустити консоль у тестовому середовищі?

    Для останніх версій Rails bundle exec rails c testабо альтернативних синтаксисів для цього.

  2. Як ви гарантуєте, що test / test_helper.rb завантажується в сеанс консолі?

    Щось на кшталт цього require './test/test_helper'треба робити.

    Для мене це повертає істину, вказуючи на те, що воно вже не завантажувалося, коли я запускав консоль. Якщо це твердження повернеться помилковим, ви просто витратили кілька натискань клавіш, але ви все одно готові йти.

  3. Як тільки test_helper завантажується, як ви називаєте визначені в ньому методи?

    У типовому тестовому_помічнику користувацькі методи, як правило, визначаються як екземплярні методи ActiveSupport :: TestCase. Тож якщо ви хочете зателефонувати до одного з них, вам потрібен примірник цього класу. За допомогою спроб та помилок, ActiveSupport :: TestCase.new має один необхідний параметр, тож ... передайте йому щось.

    Якщо ваш test_helper має метод, який називається create_user, ви можете викликати його таким чином: ActiveSupport::TestCase.new("no idea what this is for").create_user


Замість того, щоб пробу чи помилку - скористайтеся посібником API рейків, щоб знайти те, що йому потрібно api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... це, мабуть, тестове замовлення, яке :randomза замовчуванням
Mirv - Метт

Існують лише ті два методи класу, описані для ActiveSupport :: TestCase, тому мені незрозуміло, з якого класу / модуля він успадковує свій initializeметод. Але це схоже на те, що параметр, який він очікує, зберігається як @NAMEна створеному об'єкті.
Нік Девіс

1

Переконайтеся, що ви встановили GEM, і ви додали наступний рядок або у файл Environment.rb або test.rb.

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


0

Команда для запуску тестового середовища консолі рейки є

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.