种子数据后自动进入测试数据库:如何分贝加载?(How to load db:seed data in

2019-08-18 16:56发布

我试图用装载种子数据的新标准方式的Rails 2.3.4+的db:seed rake任务。

我加载恒定的数据,这是需要我的应用程序,真正正常工作。

什么是获得的最好方式db:seed任务测试之前运行,所以数据被预先填充?

Answer 1:

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

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

在哪里放置取决于您所使用的测试框架,你是否希望它每次测试之前在开始加载或只有一次。 你可以把它放在一个setup呼叫或在test_helper.rb的文件。



Answer 2:

我会说这应该是

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



Answer 3:

在LIB /任务/ test_seed.rake把这样的事情应该调用之后分贝种子任务:测试:负荷:

namespace :db do
  namespace :test do
    task :load => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end


Answer 4:

我相信史蒂夫的评论上面应该是正确的答案。 您可以使用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的

需要Rspec的before(:all)方法加载种子数据的所有测试这个模型:

describe MyModel do
  before(:all) do
  Rails.application.load_seed
end

describe "my model..." do
  # your tests here
end

希望这可以帮助。



Answer 5:

我们调用DB:种子为DB的一部分:测试:准备,有:

Rake::Task["db:seed"].invoke

这样一来,种子数据在整个测试运行加载一次,每测试类没有一次。



Answer 6:

对于使用这些种子库,它改变了种子加载方式,因此你可能无法/不希望使用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


Answer 7:

添加Rake::Task["db:seed"].invokedb:test:prepare rake任务,我没有工作。 如果我准备与数据库rake db:test:prepare ,然后在测试环境中进入控制台,我所有的种子都在那里。 然而,种子没有我的测试之间持续存在。

添加load "#{Rails.root}/db/seeds.rb"我的设置方法工作得很好,虽然。

我很想让这些种子自动加载和坚持,但我还没有找到一种方法来做到这一点呢!



文章来源: How to load db:seed data into test database automatically?