我正在使用Ruby on Rails 3.0.9和RSpec 2.我想知道我应该测试什么“验证逻辑”。也就是说,如果在我的模型中我有:
class User < ActiveRecord::Base
validates :firstname
:presence => true
end
我应该测试以下哪些内容?
或者我应该测试两者吗?
答案 0 :(得分:3)
您只需执行以下操作即可测试两者:
it "should validate presence of" do
should validate_presence_of :firstname
end
查看所有此类标准Rails验证的shoulda matchers。
答案 1 :(得分:2)
我认为你不应该同时测试两者。这就足够了:
describe User do
it { should validate_presence_of(:firstname) }
end
答案 2 :(得分:0)
基本上没有用于验证名称的算法,因为名称的形式令人难以置信地以文化为中心。所以,你应该避免复杂的验证,例如一个人的名字。例如,某些地方/文化没有姓氏,因此即使验证他们的存在也不合适。有一个完整的其他示例列表,使验证名称成为一个非常糟糕的主意。有关验证名称本身问题的更多信息,请参阅我对this question的回答。
话虽如此,一般来说,在验证任何字段时,我会测试有效和无效数据。我确保当我将字段设置为有效值时,.valid?
方法会返回true
,当它无效时,它会返回false
。
通常你不需要做很长的清单,你只需要测试
答案 3 :(得分:0)
您还可以测试特定值:
describe User do
context "validations" do
it { should_not allow_value("admin").for(:firstname) }
it { should allow_value("JohnDoe").for(:firstname) }
end
end