Я провел быструю проверку, и похоже, что сообщения об ошибках сортируются в том порядке, в котором вы написали свои операторы проверки в классе модели (сверху вниз).
Это означает, что вы можете найти сообщение об ошибке для первой проверки атрибута на первом месте в массиве ошибок:
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]