我正在尝试使用新的标准方法在db:seed
rake 2.3.4+中的rake任务中加载种子数据。
我正在加载常量数据,这是我的应用程序真正正常运行所必需的。
使db:seed
任务在测试之前运行的最佳方法是什么,以便预先填充数据?
我正在尝试使用新的标准方法在db:seed
rake 2.3.4+中的rake任务中加载种子数据。
我正在加载常量数据,这是我的应用程序真正正常运行所必需的。
使db:seed
任务在测试之前运行的最佳方法是什么,以便预先填充数据?
Answers:
该db:seed
rake任务主要只是用来加载db/seeds.rb
脚本。因此,只需执行该文件即可加载数据。
load "#{Rails.root}/db/seeds.rb"
# or
Rails.application.load_seed
放置在何处取决于您使用的是什么测试框架,以及是否希望在每次测试之前或在开始时仅一次加载它。您可以将其放入setup
通话或test_helper.rb
文件中。
Rails.application.load_seed
右下require 'rspec/rails'
我rails_helper文件。如果您使用的是database_cleaner gem,则需要进行一些微调以确保每次测试后都不会丢失种子数据,并且可以在gem的文档中找到它本身
test/test_helper.rb
现有require 'rails/test_help'
行之后
我会说应该
namespace :db do
namespace :test do
task :prepare => :environment do
Rake::Task["db:seed"].invoke
end
end
end
因为如果具有config.active_record.schema_format =:sql,则不会执行db:test:load(db:test:clone_structure是)
--trace
帮助我了解了它的工作原理。
task 'db:test:prepare' => 'db:seed'
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
于Rake::Task["db:seed"].invoke
db:seed
运行时的环境很development
奇怪。
我相信史蒂夫的上述评论应该是正确的答案。您可以用来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
使用RSpec的before(:all)
方法为该模型的所有测试加载种子数据:
describe MyModel do
before(:all) do
Rails.application.load_seed
end
describe "my model..." do
# your tests here
end
希望这可以帮助。
before(:suite)
而不是before(:all)
。发布一个单独的答案以包含格式化的代码。
test_helper.rb
,尽管stackoverflow.com/a/1998520/68210可以,但添加此行对我却不起作用。