仅在满足条件时才在Update上验证

时间:2013-10-31 21:05:11

标签: ruby-on-rails activerecord

我正在努力为应用添加一些新的验证。整个想法是确保当用户更新其用户名时,它不违反我们的用户名政策。

这是验证人的当前咒语:

validates_format_of :username, with: /[0-9a-zA-Z_]+/, 
on: :update,
if: lambda { |u| u.username_changed? }

即使有了这个验证,坏字符也会通过。

以下是我使用的规范:

it "validates and does not update a user with an invalid username" do
  user.update_attributes(username: "k~!tten")
  expect(user.username).not_to eq "k~!tten"
end

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

用户名仅在模型上为“k~!tten”。由于验证失败,它尚未保存到数据库中。而不是:

expect(user.username).not_to eq "k~!tten"

使用以下内容断言用户名未通过验证:

expect(user.username).not_to be_valid