我试图用装载种子数据的新标准方式的Rails 2.3.4+的db:seed
rake任务。
我加载恒定的数据,这是需要我的应用程序,真正正常工作。
什么是获得的最好方式db:seed
任务测试之前运行,所以数据被预先填充?
我试图用装载种子数据的新标准方式的Rails 2.3.4+的db:seed
rake任务。
我加载恒定的数据,这是需要我的应用程序,真正正常工作。
什么是获得的最好方式db:seed
任务测试之前运行,所以数据被预先填充?
该db:seed
rake任务主要只是用来加载db/seeds.rb
脚本。 因此,只需要执行该文件来加载数据。
load "#{Rails.root}/db/seeds.rb"
在哪里放置取决于您所使用的测试框架,你是否希望它每次测试之前在开始加载或只有一次。 你可以把它放在一个setup
呼叫或在test_helper.rb
的文件。
我会说这应该是
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
因为分贝:测试:如果你有config.active_record.schema_format =不执行负载:SQL(分贝:测试:clone_structure是)
在LIB /任务/ test_seed.rake把这样的事情应该调用之后分贝种子任务:测试:负荷:
namespace :db do
namespace :test do
task :load => :environment do
Rake::Task["db:seed"].invoke
end
end
end
我相信史蒂夫的评论上面应该是正确的答案。 您可以使用Rails.application.load_seed
到种子数据加载到您的测试envoironment。 然而,当这个数据被加载如何往往取决于几件事情:
没有之前的所有试验(见运行该文件一次方便的方法这个问题Github上 )。 你需要在每个测试,可能在您的测试文件的设置方法之前,一旦加载数据:
# test/models/my_model_test.rb
class LevelTest < ActiveSupport::TestCase
def setup
Rails.application.load_seed
end
# tests here...
end
需要Rspec的before(:all)
方法加载种子数据的所有测试这个模型:
describe MyModel do
before(:all) do
Rails.application.load_seed
end
describe "my model..." do
# your tests here
end
希望这可以帮助。
我们调用DB:种子为DB的一部分:测试:准备,有:
Rake::Task["db:seed"].invoke
这样一来,种子数据在整个测试运行加载一次,每测试类没有一次。
对于使用这些种子库,它改变了种子加载方式,因此你可能无法/不希望使用load ...
这里提供的解决方案。
而只是把Rake::Task['db:seed'].invoke
到test_helper导致:
Don't know how to build task 'db:seed' (RuntimeError)
但是,当我们在此之前加入load_tasks,它的工作:
MyApp::Application.load_tasks
Rake::Task['db:seed'].invoke
添加Rake::Task["db:seed"].invoke
的db:test:prepare
rake任务,我没有工作。 如果我准备与数据库rake db:test:prepare
,然后在测试环境中进入控制台,我所有的种子都在那里。 然而,种子没有我的测试之间持续存在。
添加load "#{Rails.root}/db/seeds.rb"
我的设置方法工作得很好,虽然。
我很想让这些种子自动加载和坚持,但我还没有找到一种方法来做到这一点呢!