[ruby-on-rails] db : seed 데이터를 테스트 데이터베이스에 자동으로로드하는 방법은 무엇입니까?

저는 db:seed레이크 작업 인 Rails 2.3.4+에서 시드 데이터를로드하는 새로운 표준 방식을 사용하려고합니다 .

내 응용 프로그램이 실제로 올바르게 작동하는 데 필요한 상수 데이터를로드하고 있습니다.

db:seed데이터가 미리 채워지도록 테스트 전에 작업을 실행 하는 가장 좋은 방법은 무엇입니까 ?



답변

db:seed레이크 작업은 주로 단지로드 db/seeds.rb스크립트를. 따라서 해당 파일을 실행하여 데이터를로드하십시오.

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

# or

Rails.application.load_seed

사용중인 테스트 프레임 워크와 매 테스트 전에로드할지 아니면 처음에 한 번로드할지에 따라 배치 할 위치입니다. 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 (db : test : clone_structure is)이있는 경우 db : test : load가 실행되지 않기 때문에


답변

lib / tasks / test_seed.rake에 다음과 같이 넣으면 db : test : load 이후에 seed 작업이 호출되어야합니다.

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


답변

저는 믿습니다 스티브의 댓글이 위의 정답해야합니다. 를 사용 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

도움이 되었기를 바랍니다.


답변

다음과 같이 db : test : prepare의 일부로 db : seed를 호출합니다.

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

이렇게하면 시드 데이터가 테스트 클래스 당 한 번이 아니라 전체 테스트 실행에 대해 한 번로드됩니다.


답변

seedbank를 사용하는 사람들의 경우 씨앗이로드되는 방식이 변경되므로 load ...여기에 제공된 솔루션 을 사용하고 싶지 않을 수 있습니다.

그리고 Rake::Task['db:seed'].invoketest_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 db:test:prepare다음 테스트 환경에서 콘솔에 들어가면 모든 시드가 거기에있었습니다. 그러나 씨앗은 내 테스트 사이에 지속되지 않았습니다.

load "#{Rails.root}/db/seeds.rb"그래도 내 설정 방법에 추가하면 잘 작동했습니다.

이 씨앗이 자동으로로드되고 지속되도록하고 싶지만 아직 방법을 찾지 못했습니다!