Pat*_*eau 37 irb fixtures ruby-on-rails-3
我想知道是否有一种方法可以在rails控制台中加载和/或使用fixture.实际上,我想从我的夹具中创建一个用户users.yml
进行一些测试,而不必经历User.new(:name = "John", :email = "..")
每次做的所有"痛苦" .
我目前在测试环境(rails c RAILS_ENV=test
).
如果这不是一个好办法,请说出来.我是Rails的新手所以我在这里学习:)
Rya*_*dge 42
您应该能够在进入控制台之前加载您的灯具.像这样:
bin/rails db:fixtures:load RAILS_ENV=test
rails console test
Run Code Online (Sandbox Code Playgroud)
但是,您仍然无法像在测试中那样访问夹具数据.这只是用您的灯具数据加载您的测试数据库.所以你仍然需要做类似的事情:
user = User.find_by(name: "John")
Run Code Online (Sandbox Code Playgroud)
但是,您仍然可以为此类事件创建快捷方式.你可以在〜/ .irbrc中添加你想要的任何ruby代码.我建议所描述的创建一个.railsrc文件在这里.然后,您可以设置以下内容:
john = User.find_by(name: "John")
Run Code Online (Sandbox Code Playgroud)
所以现在你可以在控制台加载后开始引用变量'john'.顺便提一下,我链接的帖子显示了如何设置全局.railsrc文件,但你可以设置它,以便你有一个每个项目.railsrc.或者,如果你想要一些不太喜欢的东西,但很容易做...只需在你的项目中创建一个ruby文件(也许是'shortcuts.rb').加载控制台后,只需执行一个require'快捷方式'.
wot*_*oto 31
可能会迟到...... Rails 4
require 'active_record/fixtures'
ActiveRecord::FixtureSet.create_fixtures(Rails.root.join('test', 'fixtures'), 'users')
Run Code Online (Sandbox Code Playgroud)
Woj*_*ski 13
您也可以将夹具加载到开发数据库中:
$ rake db:fixtures:load
$ rails c
> require 'active_record/fixtures'
> john = User.find ActiveRecord::FixtureSet.identify('john')
Run Code Online (Sandbox Code Playgroud)
可以使用 FIXTURES_DIR 变量指定备用夹具目录。该值应与测试/夹具相关。
$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures'
Run Code Online (Sandbox Code Playgroud)
也可以指定一组有限的装置
$ rake db:fixtures:load RAILS_ENV=test FIXTURES_DIR='../../spec/fixtures' FIXTURES=users,user_roles
Run Code Online (Sandbox Code Playgroud)
小智 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
Run Code Online (Sandbox Code Playgroud)
如果将此与db:reset结合使用,则可以通过将此添加到rake任务来随意填充开发环境:
task reseed: [:environment, 'db:reset', 'db:d_populate']
Run Code Online (Sandbox Code Playgroud)
然后你可以调用rake db:reseed从fixture YAML文件中填充.
您可以在 Rails 3.2 控制台中加载夹具,如下所示:
require 'active_record/fixtures'
ActiveRecord::Fixtures.create_fixtures FIXTURE_PATH_HERE, MODEL_NAME_HERE
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21839 次 |
最近记录: |