답변:
db:seed
레이크 작업은 주로 단지로드 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'
에 넣었 습니다 . 당신이 database_cleaner 보석을 사용하는 경우 - 당신이 각각의 테스트 후 종자 데이터가 손실되지 않도록하기 위해 약간의 조정이 필요합니다 그리고 당신은 찾을 수 보석의 문서에 자기
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 : clone_structure is)이있는 경우 db : test : load가 실행되지 않기 때문에
--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)
. 형식화 된 코드를 포함하기 위해 별도의 답변을 게시했습니다.
다음과 같이 db : test : prepare의 일부로 db : seed를 호출합니다.
Rake::Task["db:seed"].invoke
이렇게하면 시드 데이터가 테스트 클래스 당 한 번이 아니라 전체 테스트 실행에 대해 한 번로드됩니다.
seedbank를 사용하는 사람들의 경우 씨앗이로드되는 방식이 변경되므로 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
Matt의 답변을 바탕으로 이러한 종류의 경로 를 사용하는 경우 파일 Rails.application.load_seed
의 before(:suite)
블록이 rspec_helper.rb
아닌 블록에서 호출 하는 것이 좋습니다 before(:all)
. 이렇게하면 시드 코드가 각 테스트 그룹에 대해 한 번이 아니라 전체 테스트 스위트에 대해 한 번만 호출됩니다.
rspec_helper.rb :
RSpec.configure do |config|
...
config.before(:suite) do
Rails.application.load_seed
end
...
end
test_helper.rb
작동했지만 나를 위해 작동 하지 않았습니다.