ユーザーモデルが8文字未満のパスワードを持つことができないことを確認するためにいくつかの単体テストを書いています。
私はユーザーモデルから始めました:
class User < ActiveRecord::Base
...
validates :password, :length =>{
:minimum => 90,
:too_short => "password is too short, must be at least %{count} characters"
}, :on => :create
end
そして、user_spec.rbテスト:
describe User do
subject { FactoryGirl.build :user }
its(:password) { should have_at_least(8).items }
end
ただし、これは実際に検証をテストするのではなく、ファクトリに8文字以上のパスワードがあることをテストするだけであることに気付きました。
有効なものをテストする以外に、これを行うための良い方法はありますか?0〜7文字のパスワードの方法?
私の理論では、7文字だけをテストし、誰かが誤って4文字のパスワードで問題ないことをハードコードした場合、これは検証に合格しますが、実際には意図したものではありません。パスワードが8文字を超えることに依存するコードが他にある可能性があり(可能性は低いですが、他の状況では真である可能性があります)、4のパスワードを許可することは正しくありません。
この場合、モデルのパスワード検証を変更した人は、自分が何か間違ったことをしたことを知りません。
このような状況をTDDで適切にテストする方法を知りたいだけです。