Factories / Fixtures vs einfach Model.create (...)?

8

Was ist der Zweck von factories / fixtures (ich weiß, dass Fabriken wie Fixtures funktionieren, aber ein bisschen klarer), wenn Sie einfach ActiveRecord in Ihrem Test verwenden können, um den Datenbankeintrag zu erstellen? d. h. News.create (...)

Ich sehe einfach keinen Vorteil der Verwendung von Factory Girl, anstatt einfach einen neuen zu erstellen, sagen wir einen neuen Benutzer, der ActiveRecord-Methoden benutzt.

Danke

    
allaire 14.04.2012, 16:17
quelle

3 Antworten

2

Wenn Sie Fabriken verwenden und dem Testdatenaufbau-Muster folgen, werden Sie im Voraus ein wenig arbeiten, aber Sie sparen wirklich Zeit und Arbeit in der Zukunft.

Nehmen wir an, Sie haben ein Automodell, und dieses Auto hat einen Besitzer, und dieser Besitzer benötigt eine Adresse. Auch diese haben jeweils andere Felder. Wenn Sie dem Ansatz der direkten Verwendung der Modelle folgen möchten, müssen Sie diese Objekte (und die entsprechenden Beziehungen) in jeder Schrittdefinition erstellen, die sie erfordert. Mit der Fabrik? Sie werden nur einmal festlegen .

Sobald Sie die Fabrik an einem einzigen Ort mit der entsprechenden Struktur definiert haben, müssen Sie nur noch nach einem Auto fragen und die Fabrik wird alle Abhängigkeiten von anderen Modellen übernehmen. Ist das nicht cool? Am Ende möchten Sie an diesem Punkt auf testen.

Es ist auch wirklich cool, dass Sie bestimmte Attribute überschreiben können , so dass Sie zum Beispiel so etwas haben, wenn Sie die Attributgeschwindigkeit überschreiben wollen:

%Vor%

Aus meiner bescheidenen Sicht liebe ich Factory Girl, weil es meinen Testcode leicht zu behalten und wirklich einfach zu lesen macht.

    
Nobita 14.04.2012, 17:05
quelle
5

Fabriken

Erstellt / baut ein Objekt und verwendet es dann nur, wenn es in einem Test aufgerufen wird.

Sie definieren den "glücklichen Pfad" des Objekts einschließlich der Zuordnungen in einer Datei (wie von Ryan erwähnt) und pflegen dann nur eine Datei, wenn sich Ihre Schema- / Modellzuordnungen ändern.

Fixtures

Imitiert, wie die Datenbank für einen einzelnen Datensatz aussehen soll, sie wird in die Testdatenbank geladen und dann verwendet.

Fixtures sind Endstatus des Modells und leben in der Datenbank, werden also einmal geladen und können in den Tests verwendet werden, wie Sie es für richtig halten.

Mehrere Dateien und Sie legen Ihre Fixture-Dateien so aus, dass jede Datei und jede Zuordnung berücksichtigt wird.

NewModel.create (...)

Wird einmal erstellt und einmal in einem Test oder in einem before(:each) block

verwendet

Wenn Sie 100 dieser Blöcke haben, schreiben und pflegen Sie 100 verschiedene Objekte, ganz zu schweigen von den Assoziationen wie @user.profile.create(....) 100 mal.

Vorteile von Fabriken gegenüber NewModel.create

Eine Datei, die in Ihren Codezeilen mehrere build oder create beibehalten und nicht ersetzen und ersetzen soll.

Hinweis Es muss gesagt werden, dass ich in meiner Testsuite möchte, dass es so schnell wie möglich ist, also lasse ich FactoryGirl fallen und benutze Fixtures und NewModel.create, um vorwärts zu gehen. Nur um zu sehen, ob es schneller wird. Ich arbeite an der Theorie, dass FG meine Suite verlangsamt, ebenso wie let() und before(:each)

    
pjammer 22.12.2012 12:34
quelle
2
Mit

Factories können Sie das Testsetup in eine Datei einfügen. Zum Beispiel ist meine Projektfabrik in spec/support/factories/project_factory.rb .

Wenn ich den Standardtitel ändern oder ein anderes Attribut hinzufügen möchte, mache ich das in einer Datei. Mit AR überall in meinen Tests gespritzt, müsste ich das bei jeder einzelnen Anwendung ändern.

    
Ryan Bigg 14.04.2012 16:43
quelle

Tags und Links