0

我有一个用户模型,它需要一个至少包含一个大写字母的密码。我的规范是这样写的:

subject { User.new }
it { should_not allow_value("test123$").for(:password).with_message("password requires an uppercase letter (\"test123$\")") }

但是,此规范返回以下失败:

Expected errors to include ["password requires an uppercase letter (\"test123$\")"] when password is set to "test123$", got errors: ["password requires an uppercase letter (\"test123$\")"]

在我看来,错误数组显然包含正确的消息。我在这里做错了什么?

编辑:这是我试图指定的验证:

[
  [/[A-Z]/, "requires an uppercase letter"],
  [/[a-z]/, "requires a lowercase letter"],
  [/[0-9]/, "requires a number"],
  [/[^\w]/, "requires a special character"]
].each do |(format, message)|
  validates :password, :format => {:with => format,
    :message => message},
    :allow_blank => true
end
4

1 回答 1

0

我只能得出结论,您正在执行的代码与您所展示的不同。您的 RSpec 失败消息表明您期望错误数组包含一个包含相关字符串的数组,而不是期望它包含字符串本身。难道这个错误消息是由于运行包含....with_message(["..."])而不是你所显示的规范而导致的吗?

相关的 shoulda 代码非常简单。请参阅https://github.com/thoughtbot/should-matchers/blob/d680e7d47ba0d0bc6eba888cc4648f65b61ac2cf/lib/should/matchers/active_model/allow_value_matcher.rb的第 120 行

于 2013-07-30T19:33:26.967 回答