Luk*_*ncl 117 testing ruby-on-rails seed
我正在尝试使用Rails 2.3.4+(db:seedrake任务)中加载种子数据的新标准方法.
我正在加载常量数据,这是我的应用程序真正正常运行所必需的.
db:seed在测试之前让任务运行的最佳方法是什么,所以数据是预先填充的?
rya*_*anb 117
该db:seedrake任务主要只是用来加载db/seeds.rb脚本.因此,只需执行该文件即可加载数据.
load "#{Rails.root}/db/seeds.rb"
# or
Rails.application.load_seed
Run Code Online (Sandbox Code Playgroud)
放置位置取决于您使用的测试框架以及是否希望在每次测试之前加载或在开始时加载一次.您可以将其置于setup通话或test_helper.rb文件中.
Eug*_*kov 85
我会说它应该是
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
因为如果你有config.active_record.schema_format =:sql(db:test:clone_structure是),则不执行db:test:load
小智 17
在lib/tasks/test_seed.rake中放置这样的东西应该在db:test:load之后调用种子任务:
namespace :db do
namespace :test do
task :load => :environment do
Rake::Task["db:seed"].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 13
我相信史蒂夫上面的评论应该是正确答案.您可以使用Rails.application.load_seed将种子数据加载到测试环境中.但是,加载此数据的时间和频率取决于以下几点:
在所有测试之前没有方便的方法运行此文件一次(请参阅此Github问题).您需要在每次测试之前加载一次数据,可能在测试文件的安装方法中:
# test/models/my_model_test.rb
class LevelTest < ActiveSupport::TestCase
def setup
Rails.application.load_seed
end
# tests here...
end
Run Code Online (Sandbox Code Playgroud)
使用RSpec的before(:all)方法为此模型的所有测试加载种子数据:
describe MyModel do
before(:all) do
Rails.application.load_seed
end
describe "my model..." do
# your tests here
end
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.