Schienen: Überprüfen der Aufnahme eines booleschen tests fehlschlägt

Ich versuche, um sicherzustellen, dass ein Feld der mein Modell ist ein boolescher Wert, aber meine tests halten scheitern.

Nach der Lektüre dieses: Validierung boolean Wert in Rspec und Schienen und diese Schienen: wie kann ich überprüfen, ob etwas ist ein boolean? landete ich mache es so:

class Model < ActiveRecord::Base

  validates :my_field, :inclusion => { :in => [true, false] }

end

Habe ich versucht, dieses zu testen ein paar verschiedene Möglichkeiten (mit rspec und shoulda Matcher) und da meine tests keep on failing, ich bin jetzt bis auf die dümmste mögliche (?) Weise. Trotzdem, die tests nicht bestehen, und ich vermute, dass es einige-Mechanismus, konvertiert den Wert irgendwo.

Hier ist, was ich verwende, um herauszufinden, was Los ist:

# create instance without setting value ...

# these work as expected
model_instance.valid?.should be_false      # passes
model_instance.my_field = true
model_instance.valid?.should be_true       # passes
model_instance.my_field = false       
model_instance.valid?.should be_true       # passes

# works as expected
model_instance.my_field = ""
model_instance.valid?.should be_false      # passes

# these should pass but fail
model_instance.my_field = "foo"
model_instance.my_field.should == "foo"    # fails as well, my_field == false
model_instance.valid?.should be_false      # fails

model_instance.my_field = "false"
model_instance.my_field.should == "false"  # fails as well, my_field == false
model_instance.valid?.should be_false      # fails

model_instance.my_field = "123"
model_instance.valid?.should be_false      # fails

model_instance.my_field = "true"
model_instance.my_field.should == "true"   # fails as well, my_field == true
model_instance.valid?.should be_false      # fails

Was bin ich?
Scheint der Wert wird umgewandelt in eine einigermaßen logische Art und Weise aber, wo und wie es zu verhindern? Wie das zu tun diese Art der Validierung, richtig?

InformationsquelleAutor polarblau | 2011-03-02
Schreibe einen Kommentar