2011-03-10 5 views
28

나는 하나의 모델이있는 누드 레일 3 앱을 가지고 있으며, rails g model User을 사용하여 생성됩니다. 나는 (factory_girl_rails 사용) 공장을 추가 한RSpec 실패 : 마이그레이션 후 테이블을 찾을 수 없습니다 ...?

:

Factory.define :user do |f| 
    f.email "[email protected]" 
    f.password "blah" 
    f.password_confirmation "blah" 
    f.display_name "neezer" 
end 

그럼 내가 추가 한 하나 개의 테스트 :

require 'spec_helper' 

describe User do 

    subject { Factory :user } 

    it "can be created from a factory" do 
    subject.should_not be_nil 
    subject.should be_kind_of User 
    end 

end 

은 그 때 나는 rake db:migrate를 사용하여 내 데이터베이스를 마이그레이션 . 그런 다음

나는 rspec spec를 사용하여 테스트를 실행하고 테스트가 실패 다음

Failures: 

    1) User can be created from a factory 
    Failure/Error: subject { Factory :user } 
    ActiveRecord::StatementInvalid: 
     Could not find table 'users' 
    # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>' 
    # ./spec/models/user_spec.rb:8:in `block (2 levels) in <top (required)>' 

난 그냥 내 데이터베이스를 마이그레이션 않았기 때문에 나는 혼란 스러워요, 내 schema.db 파일이 사용자가 있음을 반영한다 테이블 선물, 그래서 무엇을 줄까요?

나는

factory_girl (1.3.3) 
factory_girl_rails (1.0.1) 
rails (3.0.5) 
rspec-rails (2.5.0) 
sqlite3 (1.3.3) 

답변

82

시도가

rake db:test:prepare 

이 당신의 테스트 DB를 수정해야 실행 ...이 초보자 질문 알지만, 벽에 내 머리를 두드리는 것은 작동하지 않습니다.

+0

그냥 그냥 테스트 데이터베이스를 "부트 스트랩"않습니다 내가 때마다 나는 새로운 마이그레이션을 만들거나 것을 실행해야합니까 사용해보십시오? – neezer

+1

한 번만 db : migrate와 비슷합니다. 실제로 마이그레이션,로드, 비품 테스트, db 테스트 등의 작업을 수행합니다. – Spyros

+1

rake db : test : prepare *가 문제를 해결하지 못하면 어떻게해야할까요? : – Raphael

2

여기에서 요점은 rspec 명령이 테스트 데이터베이스에서 마이그레이션을 실행하지 않는다는 것입니다. rake db:migrate은 현재 환경에서 마이그레이션을 실행하며 아마도 development 일 것입니다. 다른 환경 (예 : productiontest)은 변경하지 않고 종료됩니다.

당신은 당신의 테스트 DB를 준비 (드롭을하고 schema.rb를 사용하여 생성)합니다

rake spec 

을 실행하고 모든 테스트를 실행할 수 있습니다.

the other answer 제안으로

이 :

rake db:test:prepare 

의지도 설치하여 테스트 DB를,하지만 당신은 개인적으로 첫 번째 옵션을 선호한다, 그 후 RSpec에 명령을 실행해야하므로.

0

이 밖으로 시도 :

For rails version > 4.1+ this solution will work as the current scenario. 

but in Rails 4.1+, rake db:test:prepare is deprecated. 

rake db:migrate RAILS_ENV=test (it will work for all version of rails) 
+0

당신의 의도에 대한 설명을 추가했을 때 OP와 다른 방문자에게 도움이 될 것이라고 생각합니다. – reporter

+0

@reporter sure. –

+0

@reporter 업데이트 된 답변을 확인하십시오. –

관련 문제