Rspec, shoulda, validate_uniqueness_of mit Umfang und falsche Fehlermeldung

Habe ich folgende Rspec testen:

describe Productlimit do

  before(:each) do 
    @productlimit = Factory.create(:productlimit, :user => Factory.create(:user))
  end

  subject { @productlimit }

  ...

  it { should validate_uniqueness_of(:price_cents).scoped_to(:direction_down, :currency, :market_id, :user_id) }
  ...
end

Aber ich bekomme folgende verwirrende Fehlermeldung:

1) Productlimit 
     Failure/Error: it { should validate_uniqueness_of(:price_cents).scoped_to(:direction_down, :currency, :market_id, :user_id) }
       Expected errors to include "has already been taken" when price_cents is set to 9530, got errors: ["direction_down has already been taken (false)"]

Können Sie mir helfen? Ich verstehe nicht, warum dies nicht funktioniert, weil die Fehlermeldung korrekt zu sein scheint?

EDIT:

Dies passiert auch in anderen Situationen:

# product_spec.rb
...
it { should validate_numericality_of(:price).with_message("price_cents must be greater than 0 (0)") }  

# rake spec:models
Failure/Error: it { should validate_numericality_of(:price).with_message("price_cents must be greater than 0 (0)") }
   Expected errors to include "price_cents must be greater than 0 (0)" when price is set to "abcd", got errors: ["price_cents must be greater than 0 (0)"]
welche Versionen des shoulda/rspec verwenden Sie?
Ich shoulda-Matcher (1.0.0.beta2), aber ich habe es versucht mit dem aktuellen "shoulda' gem als gut..
es scheint mir, dass Sie etwas testen, dass die Schienen sollten schon testen. wenn Sie validate_numericality der in Ihrem Modell, warum es auch aufrufen, in Ihren tests? das ist unnötige Doppelarbeit
wenn die Validierung ist Teil der Spezifikation, des Verhaltens, er sollte sein es zu testen.
Nicht die Fabrik.create-Aufruf erfolgreich sein, indem Sie selbst? Sie könnten versuchen, isolieren Sie diese testen, indem Sie es auf eine Productlist.neue(:price_cents => ...) - Objekt.

InformationsquelleAutor Lichtamberg | 2011-07-03

Schreibe einen Kommentar