Frage

Kann mir jemand einen besseren Weg vorschlagen, eine Fabrik machen verwenden, um eine vorgefertigte Modell Beispiel für seine Vereinigung? Zum Beispiel, so dass es möglich wäre unten, um ein Kind der Nachricht Fabrik zu definieren, so dass ein Aufruf Factory(:my_message) könnte Ersatz für Factory(:message,:sender=>@me)?

Manchmal ist der Setup-Hash ist komplizierter als in dieser gekünstelt Beispiel, oder ist gerade in so viele Tests wiederholt, dass es besser scheint es in die Fabrik nach unten zu drücken.

Eine Alternative, die ich denken kann, ist ein Testhilfsmethode zu definieren, wie create_message_owned_by(@me), aber ich bin der Hoffnung, einen Weg innerhalb factory_girl es selbst.

factory_girl Fabriken:

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

MessagesControllerTest Auszug (mit 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
War es hilfreich?

Lösung

Ich weiß nicht, ob dies ist, was Sie suchen, aber wenn Sie erste Nachricht erstellen können Sie den Absender durch das holen und weisen es @me.

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

Ist diese Hilfe überhaupt?

Andere Tipps

für eine Minute zu ignorieren das Problem des eine unklare Abhängigkeit zu schaffen, das obige Beispiel mit den neuen Rückrufen in factory 1.2.3 behandelt werden könnte. Es gibt jetzt after_build und after_create Rückrufe, so dass Sie Operationen auf erstellte Objekte ausführen können, nachdem sie bereits in der Datenbank vorhanden sind (und eine ID haben zu greifen auf, etc).

Siehe auch diese Frage und dieses Thema von der factory_girl Mailingliste

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top