我应该测试什么“验证逻辑”?

时间:2011-09-17 17:55:00

标签: ruby-on-rails ruby ruby-on-rails-3 validation rspec

我正在使用Ruby on Rails 3.0.9和RSpec 2.我想知道我应该测试什么“验证逻辑”。也就是说,如果在我的模型中我有:

class User < ActiveRecord::Base
  validates :firstname
    :presence => true
end

我应该测试以下哪些内容?

  1. “应该拥有有效的名字”
  2. 没有有效的名字”
  3. 或者我应该测试两者吗?

4 个答案:

答案 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