私は次の簡略化されたモデルを持っています:
class User
attr_accessible :password
validates :password, :presence => true
validates_confirmation_of :password, :length => { :minimum => 4 }
end
それはかなり簡単です。RSpec / FactoryGirlでテストしており、次のテストがあります。
it "cannot create with password < 4 characters" do
expect{ model = FactoryGirl.create(:user, :password => "12", :password_confirmation => "12") }.to raise_error
end
it "cannot update to password < 4 characters" do
model = FactoryGirl.create(:user)
model.should be_valid
model.update_attributes({:password => "12", :password_confirmation => "12"})
model.reload
model.password.should_not eq("12")
end
ただし、2番目のテストは失敗します。何らかの理由で、「12」は有効なパスワードとしてデータベースに保存できるようです。なんで?APIはupdate_attributes
、検証をバイパスしてはならないと述べています。