Загрузите и используйте приспособление в консоли рельсов
Интересно, есть ли способ загрузить и/или использовать fixture в консоли rails. На самом деле, я хотел бы создать пользователя из моего прибора users.yml
, чтобы выполнить какое-либо тестирование без необходимости проходить всю "боль" при выполнении User.new(:name = "John", :email = "..")
каждый раз.
Я сейчас в тестовой среде (rails c RAILS_ENV=test
).
Если это нехороший способ сделать что-то, скажите об этом. Я новичок в Rails, поэтому я здесь, чтобы узнать:)
Ответы
Ответ 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