Pregunta

Puede alguien sugerir una mejor manera de hacer una fábrica de usar un modelo pre-construidos instancia por su asociación? Por ejemplo, por lo que sería posible a continuación para definir un niño de la fábrica de mensajes de manera que una llamada a Factory(:my_message) podría sustituir Factory(:message,:sender=>@me)?

A veces el hash configuración es más complicado que en este artificial ejemplo, o simplemente se repite en tantas pruebas que parecería mejor para empujar hacia abajo en la fábrica.

Una de las alternativas que se me ocurre es definir un método de ayuda de prueba como create_message_owned_by(@me), pero estoy esperando que hay una manera en sí factory_girl.

fábricas factory_girl:

Factory.define :sender do |s|
  sender.name "Dummy name"
end

Factory.define :message do |msg|
  msg.text "Dummy text"
  msg.association :sender
end

Factory.define :my_message, :parent=>:message do |msg|
  msg.text "Dummy text"
  ### ? what goes here for msg.association :sender ? ###
end

extracto MessagesControllerTest (usando shoulda):

context "on GET /messages" do
  setup do
    @me = Factory(:sender)
    @my_message = Factory(:message,:sender=>@me)
    @somebody_elses_message = Factory(:message)
    sign_in_as(@me)
    get :index
  end
  should "only assign my messages" do
    assert_contains(assigns(:messages), @my_message)
    assert_does_not_contain(assigns(:messages), @somebody_elses_message)
  end
end
¿Fue útil?

Solución

No sé si esto es lo que está buscando, pero si primero se crea el mensaje se puede recuperar el emisor a través de ese y asignarlo a @me.

@my_message = Factory(:message)
@me = @my_message.sender

¿Le ayuda en absoluto?

Otros consejos

Ignorando por un minuto el problema de crear una dependencia clara, el ejemplo anterior podría ser manejado con las nuevas devoluciones de llamada en factorygirl 1.2.3. En la actualidad hay after_build y after_create devoluciones de llamada, de manera que se pueden realizar operaciones sobre los objetos creados después de que ya existen en la base de datos (y tener un id para agarrarse a, etc).

esta pregunta y este hilo de la lista de correo factory_girl

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