我正在编写一些单元测试以确保用户模型的密码长度不能小于 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 很好地测试这种情况。