我想知道是否有一种方法可以在rails控制台中加载和/或使用fixture。实际上,我想从我的夹具users.yml
创建一个用户进行一些测试,而不必每次都经历User.new(:name = "John", :email = "..")
的所有“痛苦”。
我目前处于测试环境(rails c RAILS_ENV=test
)。
如果这不是一个好办法,请说出来。我是Rails的新手所以我在这里学习:)
答案 0 :(得分:41)
您应该可以在进入控制台之前加载灯具。像这样:
rake db:fixtures:load RAILS_ENV=test
rails c test
但是,您仍然无法像在测试中那样访问夹具数据。这只是用您的灯具数据加载您的测试数据库。所以你仍然需要做类似的事情:
user = User.find_by_name("John")
但是,您仍然可以为此类事件创建快捷方式。你可以在〜/ .irbrc中添加你想要的任何ruby代码。我建议按照here所述创建一个.railsrc文件。然后,您可以设置以下内容:
john = User.find_by_name("John")
所以现在你可以在控制台加载后开始引用变量'john'。顺便提一下,我链接的帖子显示了如何设置全局.railsrc文件,但你可以设置它,以便你有一个每个项目.railsrc。或者,如果你想要的东西不那么花哨,但很容易做...只需在你的项目中创建一个ruby文件(也许是'shortcuts.rb')。加载控制台后,只需执行一个require'快捷方式'。
答案 1 :(得分:30)
可能会迟到...... Rails 4
require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
答案 2 :(得分:13)
您也可以将灯具加载到开发数据库中:
$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
答案 3 :(得分:6)
所以我有一个相似但略有不同的需求。我想使用我现有的灯具(来自我的rspec测试)来填充我的开发数据库。这就是我通过向我的rake文件添加一个新任务(位于libs / tasks / * .rar)中的方法:
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文件。
答案 4 :(得分:3)
可以使用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
答案 5 :(得分:3)
您可以按如下方式在Rails 3.2控制台中加载夹具:
require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE