2012-01-11 2 views
1

난 레일 응용 프로그램에서 테스트를 위해 rspec을 설정하려고합니다. 몇 가지 샘플 테스트를 만들고 rake rspec --trace을 실행했습니다. 내가 초기화 디렉토리에있는 파일 중 하나의 데이터베이스에서 어떤 값을 사용하는 것을 시도하고 있기 때문에rspec으로 테스트하기 전에 seed_fu 조명기를로드하는 방법은 무엇입니까?

출력에서 ​​나는, 스키마 작업 중단을 긁어 다음로드됩니다

** Invoke spec:models (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
** Execute db:test:prepare 
** Invoke db:test:load (first_time) 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:load 
** Invoke db:schema:load (first_time) 
** Invoke environment 
** Execute db:schema:load 

이 메시지를 참조하십시오. 일반적으로 레코드는 데이터베이스에 있으며, 모두 db/fixtures 디렉토리의 seed_fu 파일에 있습니다.

db:schema:load 이후에이 파일을 실행하는 방법을 찾고 있습니다. 누군가 그것을하는 방법을 알고 있습니까?

답변

3

에이 라인을 추가했다.

이것은 시드가 올바른 순서로 실행되도록 보장하는 장점이 있습니다. 필요한 경우 특정 조명기 경로 나 필터링 옵션에 대한 인수를 전달할 수 있습니다. 테스트 전용 설비에 유용한 특정 경로를 사용하여 볼 수 있습니다. 예. 이 방법이 공개적으로 사용하기위한 것입니다 만약 내가 아무 생각이

# Load seed data from files 
# @param [Array] fixture_paths The paths to look for seed files in 
# @param [Regexp] filter If given, only filenames matching this expression will be loaded 
def self.seed(fixture_paths = SeedFu.fixture_paths, filter = nil) 
    Runner.new(fixture_paths, filter).run 
end 

,하지만 지금은 적어도 내 사용을 위해 잘 작동하는 것 같다 :

다음은 씨앗-FU 방법입니다.

+0

'SeedFu.seed' 호출은 DB 트래픽을 최소화하면서 seed 값을 최대화하기 위해 before (: suite) 호출 내에서 의미가 있습니다. – Nerdmaster

0

나는 받아 들일 수는 있지만 이상적이지 않은 해결책이 떠올랐다. initailizers 파일에서 데이터베이스에 대한 참조를 제거하고 간단한 정수 할당으로 바 꾸었습니다. 내 씨앗을로드하려면 나는 당신이 SeedFu.seed에 대한 간단한 호출로 직접 시더에 액세스 할 수 있습니다 나타납니다 spec_helper.rb

Dir[Rails.root.join("db/fixtures/*.rb")].each {|file| load file } 
0

당신이 시작하기 전에 RSpec에 시험이를 실행할 수 있습니다

`rake db:seed_fu` 

또는

`rake db:seed_fu FILTER=locales` 

이후

테스트

`rake db:reset` 

주 마법의 따옴표 -``

예 :

describe "POST /v1/products" do 
    before(:all) do 
    `rake db:seed_fu FILTER=4_locales` 
    end 

    after(:all) do 
    `rake db:reset` 
    end 

    ... 
end