저는 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'].invoke
test_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"
그래도 내 설정 방법에 추가하면 잘 작동했습니다.
이 씨앗이 자동으로로드되고 지속되도록하고 싶지만 아직 방법을 찾지 못했습니다!