Ruby on rails factory girl中非activerecord关联的问题

Ruby on rails factory girl中非activerecord关联的问题,ruby-on-rails,ruby,factory,factory-bot,Ruby On Rails,Ruby,Factory,Factory Bot,我刚开始在测试时使用factory girl更换夹具。我正在一个twitter客户端上工作,我正在尝试使用factory girl创建twitter对象进行测试。当我单独创建它们时,就可以了。但是,如果我尝试将它们关联起来,我会得到下面的错误 Factory.define :status, :class => Twitter::Status, :default_strategy => :build do |t| t.text 'Test Twitter Status messag

我刚开始在测试时使用factory girl更换夹具。我正在一个twitter客户端上工作,我正在尝试使用factory girl创建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\u user
会导致问题,因为当它存在时会引发此异常。有没有办法解决这个问题?或者factory girl只是为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'
NoMethodError:未定义的方法'save!'为了#
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory\u girl-1.2.0/lib/factory\u 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:运行中
/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\u girl-1.2.0/lib/factory\u girl/proxy/build.rb:17:in“associate”
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/thoughtbot-factory\u girl-1.2.0/lib/factory\u girl/attribute/association.rb:13:in'add\u 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:运行中
/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\u girl-1.2.0/lib/factory\u girl/factory.rb:217:内置
测试/功能/tweet\u feeds\u controller\u test.rb:12:in'test\u Display\u friends\u timeline\u for\u琥珀色用户'
/usr/local/share/jruby-1.1.6/lib/ruby/gems/1.8/gems/activesupport-2.2/lib/active\u-support/testing/setup\u and\u-teardown.rb:94:在“运行”中使用“回调”和“摩卡”

我非常确定factory girl只适用于ActiveRecord对象,如果您使用的是rSpec,您应该能够模拟并存根一个Twitter::User对象,而不是使用factory(如果我的语法正确):

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

这可能不太正确,但我会从这条路开始

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