【发布时间】:2015-05-26 20:41:29
【问题描述】:
我在我的一个模型中尝试测试以下验证时遇到了问题:
validate :clientnumber, format: { with: /\A\d\d\d\z/ }
本质上,我希望允许“001”成为有效条目,但不允许“1”。当我运行这些测试时:
it do
should allow_value('880', '546', '001', '999').for(:clientnumber)
end
it do
should_not allow_value('foo', '8ar', '1' ).for(:clientnumber)
end
我得到以下结果。
should allow clientnumber to be set to any of ["880", "546", "001", "999"]
通过但是,
should not allow clientnumber to be set to any of ["foo", "8ar", "1"] (FAILED - 1)
失败
最初我什至也尝试在那里测试纯整数,但意识到即使字符串形式通过也没有实际意义。在 rubular 上测试正则表达式时,它不会返回任何与单个或 2 位数字的匹配项。最终,我希望它只允许格式为 /\d\d\d/ 的字符串(即表上的数据类型)。我错过了什么导致“001”和“1”都通过?
我还注意到,在测试整数时,即使整数位于无效字符串编号的右侧,测试也会失败。
【问题讨论】:
-
我不确定为什么正则表达式不起作用,但是如果您添加了
length: { minimum : 3 }会怎样? -
另外,也许
/\A\d{3}\z/会起作用。
标签: ruby-on-rails regex rspec shoulda