So erstellen Sie ein Modell mit einer bestimmten ID mithilfe von rspec und factory girl

8

Ich benutze:

%Vor%

Ich möchte meine HP testen, wo ich immer einen Link zu einem bestimmten Benutzer habe, also enthält der Seitencontroller für HP:

%Vor%

Und die Ansicht, die HP enthält:

%Vor%

Das Problem ist, dass alle Tests fehlschlagen, da die Testdatenbank keinen Benutzer mit der ID 7 hat. Ich habe es versucht:

%Vor%

... aber das funktioniert nicht. Es gibt immer den Fehler:

Die Spezifikation ist dies:

%Vor%

Fehler / Fehler: Holen Sie sich "nach Hause" ActiveRecord :: DatensatzNotFound: Benutzer mit ID = 7

konnte nicht gefunden werden

Der HP funktioniert in der Realität gut, nur der Test schlägt fehl. Wie kann ich sicherstellen, dass dieser Test nicht fehlschlägt?

    
user929062 18.07.2013, 15:57
quelle

5 Antworten

8

Was ist mit Mocking / Stubbing (viel schneller, wenn keine Objekte in der Datenbank gespeichert werden):

%Vor%

Wenn Sie immer noch Probleme mit dem Benutzer haben, der nur instanziiert wird, können Sie immer noch die obige Technik verwenden, aber FactoryGirl.build(:user) by FactoryGirl.create(:user)

ersetzen     
Pierre-Louis Gottfrois 19.07.2013, 08:29
quelle
8

Basierend auf dem Verwenden von Factories Abschnitt der Dokumentation würde ich festlegen die id in der Spezifikation selbst mit etwas wie:

%Vor%     
James Chevalier 18.07.2013 16:04
quelle
2

Keine Antwort, aber ein Verdacht ... Sie sollten die Spezifikation wahrscheinlich nicht so schreiben, wie Sie es tun.

in Ihrer Spezifikation tun etwas wie:

%Vor%

Wenn Sie Ihre Tests von bestimmten IDs abhängig machen, ist das ein Rezept für eine Katastrophe.

    
timpone 18.07.2013 17:15
quelle
1

Sie können die ID eines Benutzers festlegen, indem Sie etwas wie

ausführen %Vor%

Aber das ist ein bisschen seltsam. Sie können sogar auf einen Fall stoßen, in dem es Benutzer 7 gibt.

Was Sie jedoch tun könnten, ist Rspecs Stubs zu verwenden, um den richtigen Benutzer zu bekommen. Zum Beispiel könnten Sie etwas wie

tun %Vor%     
Olives 18.07.2013 16:02
quelle
0

In Ihrem Fall bin ich sicher, dass Sie nur überprüfen, dass die Benutzer-ID anstelle einer bestimmten ID verwendet wird.

Wenn ich Tests schreibe, bekomme ich einfach die ID aus der Datenbank, die viel zuverlässiger ist und näher an dem ist, was Sie in Wirklichkeit tun.

Ich würde die Controller-Spezifikation so schreiben.

%Vor%

Dies sollte gut geladen werden. Wenn Sie überprüfen möchten, ob der Link korrekt ist, sollten Sie dies in einer feature spec mit etwas wie Capybara tun.

    
Tyrone Wilson 08.08.2016 04:59
quelle