Подтвердить что ты не робот

Загрузите и используйте приспособление в консоли рельсов

Интересно, есть ли способ загрузить и/или использовать fixture в консоли rails. На самом деле, я хотел бы создать пользователя из моего прибора users.yml, чтобы выполнить какое-либо тестирование без необходимости проходить всю "боль" при выполнении User.new(:name = "John", :email = "..") каждый раз.
Я сейчас в тестовой среде (rails c RAILS_ENV=test).

Если это нехороший способ сделать что-то, скажите об этом. Я новичок в Rails, поэтому я здесь, чтобы узнать:)

4b9b3361

Ответ 1

Вы должны быть в состоянии загрузить свои приборы до входа в консоль. Как это:

bin/rails db:fixtures:load RAILS_ENV=test
rails console test

Тем не менее, вы все равно не сможете получить доступ к данным своего прибора, как в тесте. Это просто загружает вашу тестовую базу данных с вашими данными приборов. Так что вам все равно придется сделать что-то вроде:

user = User.find_by(name: "John")

Но вы все равно можете создавать ярлыки для такого рода вещей. Вы можете добавить любой код ruby к своему ~/.irbrc. Я предлагаю создать файл .railsrc, как описано здесь. Затем вы можете настроить такие вещи, как:

john = User.find_by(name: "John")

Так что теперь вы можете просто начать ссылаться на переменную 'john' после загрузки консоли. Кстати, пост, на который я ссылался, показывает, как настроить глобальный файл .railsrc, но вы можете настроить его так, чтобы у вас был отдельный проект .railsrc. Или, если вы хотите что-то менее необычное, но простое в выполнении... просто создайте файл ruby в вашем проекте (возможно, "shortcuts.rb"). После загрузки консоли просто сделайте "быстрые клавиши".

Ответ 2

Может быть, поздно... Rails 4

require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')

Ответ 3

Вы также можете загрузить приборы в свою базу данных разработки:

$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')

Ответ 4

Итак, у меня была аналогичная, но немного другая потребность. Я хотел использовать мои существующие приборы (из моего теста rspec) для заполнения моей базы данных разработки. Так я сделал это, добавив новую задачу в свой файл rake (расположенный в libs/tasks/*. Rake):

task d_populate: :environment do
  require 'active_record/fixtures'
  fixtures_dir = File.join(Rails.root, '/spec/fixtures') #change '/spec/fixtures' to match your fixtures location
  Dir.glob(File.join(fixtures_dir,'*.yml')).each do |file|
  base_name = File.basename(file, '.*')
  puts "Loading #{base_name}..."
  ActiveRecord::Fixtures.create_fixtures(fixtures_dir, base_name)
  end
end

Если вы объедините это с db: reset, вы можете заполнить свою среду разработки по своему усмотрению, добавив это также в свою команду rake:

task reseed: [:environment, 'db:reset', 'db:d_populate']

Затем вы можете вызвать rake db: reseed для заполнения из файлов YAML с ярлыком.

Ответ 5

Вы можете загрузить прибор в консоли Rails 3.2 следующим образом:

require 'active_record/fixtures'

ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE

Ответ 6

Можно указать альтернативный каталог приборов, используя переменную FIXTURES_DIR. Значение должно быть относительно тестов/приборов.

$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures'

Также можно указать ограниченный набор светильников

$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures' FIXTURES=users,user_roles