【发布时间】:2012-10-18 03:49:41
【问题描述】:
我正在编写一些单元测试以确保用户模型的密码长度不能小于 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 正确测试这种情况。
【问题讨论】:
-
我不明白你的问题..
标签: ruby-on-rails validation rspec tdd