1

내 Ruby 버전은 1.9.3p385입니다. 내 Rails 버전은 3.2.12입니다."rake test"가 "rake db : seed"데이터를 삭제하지 못하게하는 방법은 무엇입니까?

나는 테스트 데이터베이스를로드하려면 다음을 사용 :

rake db:seed RAILS_ENV=test 

모든 것이 잘 작동합니다. 모든 공장 ​​소녀 물건은 멋지게로드됩니다.

test/factories.rb에는 공장이 들어 있습니다. DB/seeds.rb의 내용은 간단하다 :

FactoryGirl.create(:music_categorization) 
FactoryGirl.create(:dance_categorization) 

지금, 나는 다음과 같은 명령을 사용하여 테스트를 실행하면

rake test 

레일 삭제 모든 씨앗 데이터와 테스트가 실패합니다. 나는 "rake test"가 데이터를 삭제하는 것을 막을 방법을 원합니다.

다른 경로는이 question에서 언급 한 "rake test"명령의 일부로 시드 데이터를로드하는 것입니다. 그러나, 그 일을 끝내는 것은 테스트 데이터를 두 번로드하는 것입니다 (기본적으로 db/seeds.rb는 어떤 이유로 2 번 호출됩니다). 나는 그 경로를 포기하고 이제는 다음을 수행하여 테스트를 실행하려고합니다.

rake db:seed RAILS_ENV=test 
rake test 

도움이 되었습니까? 기본적으로 레이크 테스트가 내 데이터를 삭제하거나 db/seeds.rb가 두 번 호출되지 않도록하는 방법을 찾아야합니다.

답변

1

AFAIK 보통 테스트 목적으로 데이터를로드하는 데 db:seed을 사용하지 않으므로 일반적으로 개발 용도로만 시드 데이터를로드하는 데 사용됩니다.

대신 실제 테스트 파일에 테스트 데이터를 만들어야합니다. 보통 테스트 데이터는 각 테스트 후에 database_cleaner과 같은 것을 사용하여 삭제되므로 각 테스트는 빈 데이터베이스로 시작됩니다. 당신이 let 블록, before 블록 또는 시험 자체 테스트 데이터를로드 할 수 있습니다 RSpec에 예를 들어

, 예컨대

require 'spec_helper' 

describe Page do 
    let(:user) { FactoryGirl.create(:user) } 

    before do 
    # create some data 
    end 

    it '#name returns XYZ' do 
    page = FactoryGirl.create(:page, :user => user) 
    page.description.should == 'XYZ' 
    end 

    it '#description returns ABC' do 
    page = FactoryGirl.create(:page, :user => user) 
    page.description.should == 'ABC' 
    end 
end 
+0

감사합니다. 나는 이것을 해결책으로 받아 들였다. 당신과 @boulder는 같은 개념을 지적했다. 나는 database_cleaner를 지적하면서 해결책을 제시했으며, rspec의 완전한 예제를 제공했다. 고맙습니다! – Nightwolf

1

먼저, 일반적으로 테스트에서 시드 (seed) 데이터를 사용하면 안된다고 말합니다. 테스트는 빈 데이터베이스로 실행해야하며 각 테스트에 필요한 데이터 만 작성합니다.

귀하의 경우에는 응용 프로그램이 올바르게 작동해야하는 기본적으로 핵심 데이터 인 시드 데이터의 의미를 이해하지 못하는 것처럼 보입니다. 당신이 당신의 테스트에서 모델의 몇 가지를 인스턴스화해야하는 경우, 단순히 시도하고 rspec을 실행 항상, 여전히 시드 데이터로 테스트를 실행하려면

before(:each) do 
     FactoryGirl.create(:music_categorization) 
     FactoryGirl.create(:dance_categorization) 
    end 

수 있습니다 (당신이 RSpec을를 사용하는 가정) 할 이것은 테스트 데이터베이스를 그대로두고 모든 rspec 예제를 실행합니다. 그러나 그것이 당신이 원하는 것이 아니라고 믿습니다.

+0

는 의견 주셔서 감사합니다. 매우 도움이되었고 각 테스트마다 초기화 작업에 대한 조언을 받았습니다. 나는 rake db : seed를 테스트와 함께 사용하는 아이디어를 버렸다. – Nightwolf