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 werdenDer HP funktioniert in der Realität gut, nur der Test schlägt fehl. Wie kann ich sicherstellen, dass dieser Test nicht fehlschlägt?
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)
Basierend auf dem Verwenden von Factories Abschnitt der Dokumentation würde ich festlegen die id
in der Spezifikation selbst mit etwas wie:
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%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.
Tags und Links ruby-on-rails-3 ruby-on-rails factory-bot rspec2