Проблема с неактивными ассоциациями у заводской девушки - PullRequest
2 голосов
/ 27 февраля 2009

Я только начал использовать заводскую девушку для замены приборов во время тестирования. Я работаю над твиттер-клиентом и пытаюсь использовать фабричную девушку для создания твиттер-объектов для тестирования. Когда я создаю их индивидуально, это нормально. Но, если я пытаюсь связать их, я получаю ошибку ниже.

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 вызывает проблемы, потому что, когда это там, это исключение выдается. Есть ли способ исправить это? Или заводская девушка просто предназначена для активных записей? Спасибо

   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 Ответ

1 голос
/ 28 февраля 2009

Я почти уверен, что Factory Girl предназначена только для объектов ActiveRecord, вы должны просто иметь возможность смоделировать и заглушить объект Twitter :: User, а не использовать Factory, если вы использовали rSpec, возможно (если мой синтаксис справа):

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

, а затем прикрепите его к нужному объекту.

Возможно, это не совсем правильно, но я бы пошел по этому пути.

...