我的用户模型中有以下验证:
validates :name, :format => {
:with => /^[a-zA-Z]+$/,
:message => 'Only letters allowed.'
}
这是我的测试:
test 'name must consist of letters only' do
user = User.new(:name => 'test123')
assert user.errors[:name].any?
end
测试总是失败。我做错了什么?的xD
答案 0 :(得分:2)
你的断言与它应该是的相反。颠倒断言的条件。
试试这个
test 'name must consist of letters only' do
user = User.new(:name => 'test123')
assert !user.valid?
end
另外,请尝试使用validates_format_of
代替validate
validates_format_of :name, :with => /^[a-zA-Z]+$/, :message => 'Only letters allowed.'
答案 1 :(得分:0)
我弄清楚我的问题是什么:
在尝试访问user.valid?
之前,我应该完成user.invalid?
,user.save
或user.errors
。上面的命令实际上会产生错误,之后我可以访问它们
最终结果:
validates_format_of :name, :with => /^[a-zA-Z]+$/, :message => 'Only letters allowed'
test 'name must consist of letters only' do
user = User.new(:name => 'test123')
user.save
assert user.errors[:name].any?
end