Pregunta

acabo de empezar a usar chica de la fábrica para reemplazar los accesorios cuando estoy probando. Estoy trabajando en un cliente de twitter y estoy tratando de usar chica de la fábrica para crear los objetos de Twitter para las pruebas. Cuando las creo de forma individual, está bien. Pero, si trato de asociarlos consigo el error más adelante.

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

El t.association :user, :factory => :twitter_user causa los problemas, porque cuando está ahí se lanza esta excepción. ¿Hay alguna forma de arreglar esto? O es niña habitante diseñada para objetos ActiveRecord? Gracias

   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'
¿Fue útil?

Solución

Estoy bastante seguro de que la chica de la fábrica es sólo para los objetos ActiveRecord, sólo debe ser capaz de burlarse de resguardo y un Twitter :: objeto Usuario en lugar de utilizar una fábrica, si estuviera usando RSpec tal vez (si mi sintaxis es derecha):

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

y luego coloque que a su objeto que lo necesita.

Esto podría no ser del todo bien, pero es el camino que iba a comenzar a recorrer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top