【发布时间】:2015-03-10 21:39:19
【问题描述】:
我有seeds.rb 填充我的开发数据库。而且我知道我可以使用以下方法轻松地将seeds.rb 应用到我的测试数据库:
rake db:seed RAILS_ENV=test
但是,我想要一个不同的 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
我认为这行得通,但是我希望我的 rake 任务能够自动知道将其仅应用于测试数据库,而无需我指定:
rake db:seed_test RAILS_ENV=test
我如何获得 rake 任务,所以我必须在命令行中输入:
rake db:seed_test
更新:另一个 stackoverflow 问题与答案在哪里相关:
Rails.env = 'test'
不幸的是,这实际上并没有做任何事情(至少从 Rails 4.2 开始):(.
【问题讨论】:
-
不幸的是,对那个重复问题的回答(这不是真正的重复)不起作用:(。
Rails.env = 'test'实际上并没有改变环境,种子数据进入开发数据库。 -
不是吗?我刚刚对其进行了测试,它绝对适合我(仅添加到
test.sqlite3的数据)。 (我复制了你的代码,将Rails.env = 'test'放在load的上方。)我还运行Rails 4.2.0。 -
加载测试数据是一个非常普遍的需求。最常见的方法是使用夹具来存储测试数据。为什么不使用fixtures和
rake db:fixtures:load? -
@Amadan - 我热情地尝试了这个
Rails.env = 'test',但它只将数据加载到development.sqlite3数据库,而不是test.sqlite3数据库。让我质疑Rails.env = 'test'声明的目的。 @blowmage,固定装置似乎很有意义,我只是继续阅读永远不应该使用固定装置......
标签: ruby-on-rails rspec rake minitest rake-task