2009-02-27 50 views
2

我刚开始使用工厂女孩来替换灯具,当我测试。我正在使用Twitter客户端,我正在尝试使用工厂女孩创建Twitter对象进行测试。当我单独创建它们时,它很好。但是,如果我尝试关联它们,我会看到下面的错误。工厂女孩非主动记录关联问题

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

我敢肯定,工厂的女孩仅仅是ActiveRecord的对象,你就应该能够小样和存根一个Twitter用户::对象,而不是使用一个工厂,如果你使用也许RSPEC (如果我的语法正确):

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

然后将其附加到需要它的对象。

这可能不太对,但这是我要开始的道路。