【问题标题】:How to test custom messages thrown back by a models validation in Rails如何测试 Rails 中模型验证返回的自定义消息
【发布时间】:2010-12-16 12:59:46
【问题描述】:

我的用户模型中有此验证。

validates_uniqueness_of :email, :case_sensitive => false,
              :message => "Some funky message that ive cleverly written"

在我的测试中,我想确保当用户输入一个重复的电子邮件地址时,我的消息肯定会显示出来,但不必在我的测试中从上面复制错误字符串。我不喜欢这样,因为当我开始考虑复制时,我确信信息会改变。 Rails 是否存储这些错误消息 - 我可以在测试中调用的东西?

我做了一个普通的测试

assert @error_messages[:taken] , user.errors.on(:email)

但这会传递任何其他与电子邮件相关的错误,因为我设置了验证以捕获,即格式不正确、空白等。

【问题讨论】:

    标签: ruby-on-rails model-view-controller controller


    【解决方案1】:

    我做了一个快速测试,看起来错误消息是按照您在模型类中编写验证语句的顺序排序的(自上而下)。

    这意味着,您可以在错误数组的第一个位置找到第一次验证属性的错误消息:

    user.errors.on(:email)[0]
    

    所以,如果您的用户模型类包含如下内容:

    validates_presence_of   :email
    validates_uniqueness_of :email, :case_sensitive => false, :message => "Some funky message that ive cleverly written"
    validates_length_of     :email
    

    ...您会在 user.errors.on(:email)[1] 找到您的“时髦消息”,但至少在 validates_presence_of 也触发错误的情况下。

    关于您的具体问题: 我能想到在测试中重复您的错误消息的唯一方法是在您的用户模型中定义一个常量并使用它而不是直接输入消息进行验证:

    EMAIL_UNIQUENESS_ERROR_MESSAGE = "Some funky message that ive cleverly written"
    ...
    validates_uniqueness_of :email, :case_sensitive => false, :message => EMAIL_UNIQUENESS_ERROR_MESSAGE
    

    在你的测试中,你也可以使用这个常量:

    assert_equal User::EMAIL_UNIQUENESS_ERROR_MESSAGE, user.errors.on(:email)[1]
    

    【讨论】:

    • 感谢您的回复。是的,我考虑过使用常量的可能性,只是想知道其他人都做了什么。感谢您的建议!
    【解决方案2】:

    在 rspec 中,

    it "should validate uniqueness of email" do
      existing_user = User.create!(:email => email)
      new_user = User.create!(:email => existing_user.email)
      new_user.should_not be_valid
      new_user.errors.on(:email).should include("Some funky message that ive cleverly written")
    end
    

    【讨论】:

    • 感谢 selva 提供代码。这几乎就是我所拥有的,它是手动输入我想要解决的错误消息。
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2011-07-20
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多