为了账号安全,请及时绑定邮箱和手机立即绑定

如何自动将db:seed数据加载到测试数据库中?

/ 猿问

如何自动将db:seed数据加载到测试数据库中?

拉风的咖菲猫 2019-12-13 09:25:11

我正在尝试使用新的标准方法在db:seedrake 2.3.4+中加载种子数据,这是rake任务。


我正在加载常量数据,这是我的应用程序真正正常运行所必需的。


使db:seed任务在测试之前运行的最佳方法是什么,以便预先填充数据?


查看完整描述

3 回答

?
慕慕森

该db:seedrake任务主要只是用来加载db/seeds.rb脚本。因此,只需执行该文件即可加载数据。


load "#{Rails.root}/db/seeds.rb"


# or


Rails.application.load_seed

放置在何处取决于您使用的是什么测试框架,以及是否要在每次测试之前或在开始时仅一次加载它。您可以将其放入setup通话或test_helper.rb文件中。


查看完整回答
反对 回复 2019-12-13
?
慕容森

我说应该


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是)


查看完整回答
反对 回复 2019-12-13
?
慕田峪4524236

我相信史蒂夫的上述评论应该是正确的答案。您可以用来Rails.application.load_seed将种子数据加载到测试环境中。但是,何时以及何时加载此数据取决于以下几件事:


使用Minitest

在进行所有测试之前,没有一种方便的方法可以运行一次此文件(请参阅此Github问题)。您需要在每次测试之前加载一次数据,这很可能是在测试文件的设置方法中进行的:


# test/models/my_model_test.rb

class LevelTest < ActiveSupport::TestCase


  def setup

    Rails.application.load_seed

  end


  # tests here...


end

使用RSpec

使用RSpec的before(:all)方法为该模型的所有测试加载种子数据:


describe MyModel do

  before(:all) do

  Rails.application.load_seed

end


describe "my model..." do

  # your tests here

end

希望这可以帮助。


查看完整回答
反对 回复 2019-12-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信