Wie man ein Modell erstellen, mit einer bestimmten id mit rspec und factory girl
Benutze ich:
gem 'rails', '3.2.11'
gem 'rspec-rails', '2.13.2'
gem 'webrat', '0.7.3'
gem 'factory_girl_rails', '4.1.0'
gem 'spork', '~> 0.9.0.rc'
Ich möchte zum testen meiner HP, wo ich immer einen link zu einem bestimmten Benutzer, so dass die Seiten-controller für die HP enthält:
@user = User.find(7)
Und die Ansicht von HP enthält:
link_to 'See user', @user
Das problem ist, dass alle tests fehlschlagen, da die test-Datenbank keine Benutzer mit der id 7. Ich habe versucht:
FactoryGirl.define do
factory :user do
name "Testuser"
id "7"
end
end
... aber das funktioniert nicht. Es kommt immer der Fehler:
Die Skillung ist diese:
describe "GET 'home'" do
before(:each) do
FactoryGirl.create(:user)
end
it "should be successful" do
get 'home'
response.should be_success
end
end
Ausfall/Fehler: Holen Sie sich 'zu Hause'
ActiveRecord::RecordNotFound:
Konnte nicht finden, dass User mit der id=7
Die HP ist in Ordnung, die in Wirklichkeit nur der test schlägt fehl. Wie kann ich sicherstellen dieser test ist nicht zu Versagen?
- Ich bin mir nicht sicher, ob dies funktionieren würde, aber versuchen, id = 7
- Können Sie fügen Sie den code für Ihr Versagen spec, bitte?
- Zeigen Sie den code der spec, wenn Sie wollen nützliche Hilfe. Bisher ist jeder erraten.
- Sorry... ich habe den spec des fehlerhaften test.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist mit mocking /stubbing (viel schneller spec, wenn Sie nicht speichern von Objekten zur Datenbank):
Wenn Sie noch ein Problem mit dem user wird nur instanziiert, können Sie immer noch verwenden Sie das obige Verfahren, aber ersetzen
FactoryGirl.build(:user)
durchFactoryGirl.create(:user)
Basiert auf der Mit Fabriken Abschnitt der Dokumentation würde ich die
id
in der spec selbst mit so etwas wie:Nicht eine Antwort, aber eine suspicition... Sie sollte wohl nicht schreiben die Skillung so, wie Sie sind, es zu tun.
in deine Skillung ist etwas wie:
Machen Sie Ihre tests, abhängig von bestimmten ids ist ein Rezept für eine Katastrophe.
Können Sie die ID eines Benutzers von etwas wie
Dies ist jedoch ein wenig seltsam. Sie können sogar in einem Fall, wo gibt es die 7.
Was Sie tun konnte, obwohl, ist die Verwendung Rspec ' s stubs zu Holen Sie sich die richtigen Benutzer. Zum Beispiel könnten Sie etwas tun, wie
In deinem Fall bin ich sicher, dass Sie nur die überprüfung, dass die Benutzer-id verwendet wird und nicht eine bestimmte ID.
Wenn ich tests schreiben, bekomme ich nur die id von der Datenbank zurückgegeben wird, die weit zuverlässiger und näher an dem, was Sie tun in der Realität.
Ich würde schreiben Sie die controller-spec so etwas wie dieses.
Dieser laden soll gut. Wenn Sie möchten, um zu überprüfen, dass der link richtig ist sollte man das nicht in einem
feature
spec mit so etwas wie capybara.