2016-09-06 3 views
0

Ich versuche rspec zu lernen und bin auf ein Problem gestoßen. Ich versuche, die Eindeutigkeitsprüfung auf einem meiner Modelle zu testen, aber der Test scheitert, obwohl ich ziemlich sicher bin, dass es bestanden wird .Testen der Eindeutigkeitsprüfung

Hier ist mein Test:

context "two products with the same title" do 
    Given{FactoryGirl.build(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
    end 

und hier ist mein Validator:

validates :title, uniqueness: true 

jedoch, wenn ich den Test ausführen es wieder gescheitert kommt und ich bin nicht sicher, warum?

jede Hilfe wäre großartig!

+0

Wo ist die Validierung der Eindeutigkeit? Sie validieren nur die Mindestlänge des Titels. –

Antwort

1

Sie müssen sich auf title Einzigartigkeit Validierung hinzuzufügen:

validates :title, uniqueness: true 

Und Sie haben auch create erste product nicht nur build es

context "two products with the same title" do 
    Given{FactoryGirl.create(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
end 

Dies wird mit title = "Hello test title" ein Produkt erstellen

Und für zweites Produkt mit demselben title Produkt wird invalid

+0

Entschuldigung, ich habe 'validates: Titel, Eindeutigkeit: wahr' Ich habe nur die falsche Zeile kopiert – user2320239

+0

immer noch die zweite Sache, die Sie ändern müssen –

+0

Sie müssen zuerst Produkt statt Build erstellen –

0

Sie sollten für die Prüfung dieser Art von Tests ein Juwel wie shoulda-Matcher verwenden: https://github.com/thoughtbot/shoulda-matchers Es wird Ihnen eine Menge Zeit sparen und es wird Ihre Tests trocken (da sie alle gleich sind)

Was Ihren Test angeht, bin ich mir nicht sicher, was Sie erreichen wollen. Sie bestätigen dort nicht die Eindeutigkeit, sondern nur die Länge des Produkts. Zum Hinzufügen der Einzigartigkeit fügen Sie Ihr Produktmodell:

validates :title, uniqueness: true 

Und wenn die Tests vornehmen, sollten Sie (statt Build) Ihr erstes Produkt erstellen. Solange Ihr Produkt nicht in der Datenbank gespeichert ist, sind Ihre Produkte gültig, da es (noch) kein anderes Produkt wie dieses gibt.

+0

Entschuldigung, ich habe validiert: Titel, Eindeutigkeit: wahr, ich habe nur die falsche Zeile kopiert – user2320239

+0

Häufiger Fehler;) Ich noch empfehlen Ihnen sehr, den Edelstein zu benutzen – hcarreras