2009-02-27 3 views
2

테스트 할 때 공장 소녀를 사용하여 조명기를 교체하기 시작했습니다. 나는 트위터 클라이언트에서 일하고 있으며 테스트를 위해 트위터 개체를 만들기 위해 공장 여자를 사용하려고합니다. 개별적으로 만들면 괜찮습니다. 그러나, 나는 그들을 연관 시키려고하면 아래에 오류가 발생합니다. 이있을 때이 예외가 발생하기 때문에팩토리 소녀의 nonactiverecord 연관 문제

Factory.define :status, :class => Twitter::Status, :default_strategy => :build do |t| 
    t.text 'Test Twitter Status message' 
    t.association :user, :factory => :twitter_user #this line causes the problems 
end 

Factory.define :twitter_user, :class => Twitter::User, :default_strategy => :stub do |u| 
    u.profile_image_url "#{RAILS_ROOT}/public/images/rails.png" 
end 

t.association :user, :factory => :twitter_user이 문제가 발생합니다. 이 문제를 해결할 수있는 방법이 있습니까? 또는 activerecord 객체 용으로 설계된 팩토리 소녀입니까? 감사합니다

NoMethodError: undefined method `save!' for #<Twitter::User:0x4af3de46> 
    /usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/proxy/create.rb:5:in `result' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:293:in `run' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:237:in `create' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/proxy/build.rb:17:in `associate' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/attribute/association.rb:13:in `add_to' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:290:in `run' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:288:in `each' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:288:in `run' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory_girl-1.2.0/lib/factory_girl/factory.rb:217:in `build' 
test/functional/tweet_feeds_controller_test.rb:12:in `test_Display_friends_timeline_for_the_'amber'_user' 
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run_with_callbacks_and_mocha' 

답변

1

나는 당신이 당신이 RSpec을 어쩌면 사용한 경우, 팩토리를 조롱하고 스텁 트위터 : 사용자 개체를하기보다는 사용할 수 있어야, 공장 소녀 그냥 액티브 오브젝트에 대한 것을 확신 (내 구문이 맞다면) :

@twitter_user = mock(Twitter::User, :profile_image =>"#{RAILS_ROOT}/public/images/rails.png") 

그런 다음이를 필요한 객체에 첨부하십시오.

이것은 적절하지 않을 수도 있지만, 시작하는 경로입니다.