at.*_*at. 1 rake rspec ruby-on-rails minitest rake-task
我已经seeds.rb填充了我的开发数据库.我知道我可以seeds.rb使用以下方法轻松应用于我的测试数据库:
rake db:seed RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个不同的 seeds.rb文件来填充我的测试数据库.也许吧seeds_test.rb.这对于rails程序员来说一定是一个非常普遍的要求,不是吗?
如果没有简单的方法可以做到这一点rake db:seed:seeds_test RAILS_ENV=test,那么我将如何创建一个rake任务呢?我会想到这样的事情lib/tasks/test_seeds.rake:
namespace :db do
desc "Seed data for tests"
task :seed_test => :environment do
load "#{Rails.root}/db/seeds_test.rb"
end
end
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,但是我希望我的rake任务能够自动知道只将这个应用到测试数据库而不必指定:
rake db:seed_test RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
如何获取rake任务,以便我必须在命令行中输入:
rake db:seed_test
Run Code Online (Sandbox Code Playgroud)
更新:另一个stackoverflow问题链接到答案的位置:
Rails.env = 'test'
Run Code Online (Sandbox Code Playgroud)
不幸的是,实际上并没有做任何事情(至少从Rails 4.2开始):(.
das*_*s-g 10
在db/seeds.rb,测试Rails.env相应种子的值并执行相应的种子:
#db/seeds.rb
case Rails.env
when 'development'
# development-specific seeds ...
# (anything you need to interactively play around with in the rails console)
when 'test'
# test-specific seeds ...
# (Consider having your tests set up the data they need
# themselves instead of seeding it here!)
when 'production'
# production seeds (if any) ...
end
# common seeds ...
# (data your application needs in all environments)
Run Code Online (Sandbox Code Playgroud)
如果你想使用单独的文件,只需require在这个结构中,例如:
#db/seeds.rb
case Rails.env
when 'development'
require 'seeds_development'
when 'test'
require 'seeds_test'
when 'production'
require 'seeds_production'
end
require 'seeds_common'
Run Code Online (Sandbox Code Playgroud)
或更短
#db/seeds.rb
require "seeds_#{Rails.env}"
require 'seeds_common'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5297 次 |
| 最近记录: |