2011-02-09 4 views
20

저는 레일스와 TDD에 상당히 익숙하며 (내 게시물에서 분명히 알 수 있듯이) Rspec 및 FactoryGirl 주변에 두뇌를 감싸는 데 어려움을 겪고 있습니다.FactoryGirl + RSpec + Rails 3 '정의되지 않은 메소드 <attribute> ='

내가 레일 (3)을 사용하고, RSpec에 공장 소녀 :

gem 'rails', '3.0.3' 
# ... 
gem 'rspec-rails', '~>2.4.0' 
gem 'factory_girl_rails' 

내가 성공적으로 개발 과정에서 테스트를 실행했습니다 사용자 모델을 가지고,하지만,라고하는 속성을 추가하는 데 필요한 "출처". 이는 사용자 기록이 원래 어디서 왔는지 (로컬 대 LDAP)를 결정하기위한 것입니다. 내 factories.rb 파일에서

, 나는 여러 공장은 같은 모양이, 정의 다음

# An alumnus account tied to LDAP 
Factory.define :alumnus, :class => User do |f| 
    f.first_name "Mickey" 
    f.last_name "Mouse" 
    f.username "mickeymouse" 
    f.password "strongpassword" 
    f.source  "directory" 
end 

내가 가진 (즉, 지금까지 일해) 같이 보이는 정의 매크로 :

내가 그렇게 (users_controller_spec.rb에서 예)처럼 여러 사양에 전화 해요
def login(user) 
    before(:each) do 
    sign_out :user 
    sign_in Factory.create(user) 
    end 
end 

:

describe "for non-admins or managers" do 
    login(:alumnus) 

    it "should deny access" do 
    get :index 
    response.should redirect_to(destroy_user_session_path) 
    end 

end 

나는 "소스"속성을 지정하지 않으면, 모든 확인을 작동하지만 난에서 속성을 문제에 액세스 할 수 없습니다

12) UsersController for non-admins or managers should deny access 
Failure/Error: Unable to find matching line from backtrace 
NoMethodError: 
    undefined method `source=' for #<User:0x00000100e256c0> 

테스트를 실행할 때 최대한 빨리처럼, 정말 같은 오류가 발생합니다 레일 콘솔과 응용 프로그램 자체, 그리고 그것은 내 attr_accessible에 사용자 모델에 나열되어 있습니다. 거의 Rspec이 내 모델의 구버전을보고 있으며 그 모델에 속성을 추가했음을 알지 못합니다. 내 사용자 모델에 다음 줄을 넣어하지만, 오류가 실제로 올바른 모델을 찾고 나에게 나타냅니다 ...

attr_accessor :source 

을 사라집니다.

도움말!

답변

54

어떨까요?

rake db:test:load 

[새 속성을 추가 한 경우에는 테스트 데이터베이스로 마이그레이션해야 것입니다.]

+2

감사! 예 - 그게 전부였습니다 ... 테스트 데이터베이스를 사용하여 잊어 버렸습니다 ... – dearlbry

+2

Big save! 고마워요 @ TK-421. 완전히 테스트 DB에 있다는 것을 잊어 버렸습니다 ... – MorningHacker

+0

신의 축복을 받으십시오. – ant

5

을 (당신이 config.active_record.schema_format = :sql을 설정 한 예) 당신은 schema.rb를 사용하지 않는 경우 당신이해야 실행

rake db:test:prepare