Подтвердить что ты не робот

Как я могу использовать `должен validate_presence_of` с настраиваемым сообщением об ошибке?

Я тестирую свои модели ActiveRecord с помощью Rspec. Я только что добавил специальное сообщение об ошибке в одну из моих проверок, например:

validates :accepted_terms_at, :presence => {:message => 'You must accept the Terms and Conditions to use this site.'}

Теперь следующий тест не выполняется:

it { should validate_presence_of(:accepted_terms_at) }

... с ошибкой Expected errors to include "can't be blank" when accepted_terms_at is set to nil.

Таким образом, тест терпит неудачу, потому что он просматривает сообщения об ошибках проверки и ожидает поиска по умолчанию.

Как сообщить Rspec, что должно быть новым сообщением о проверке?

Что я пробовал

1) Сообщение в качестве аргумента:

it {should validate_presence_of(:accepted_terms_at, :message => 'your message')}

Это дает ошибку wrong number of arguments (2 for 1)

2) Сообщение как вызов цепного метода

it {should validate_presence_of(:accepted_terms_at).with('your message')}

Это вызывает ошибку, поскольку метод with отсутствует.

4b9b3361

Ответ 2

Подробный путь

Этот тест работает, это просто не так лаконично, как хотелось бы.

it "should validate the presence of accepted_terms_at" do
  @user.accepted_terms_at = nil
  @user.valid?
  message = "You must accept the Terms and Conditions to use this site."
  expect {@user.errors.messages.include?(message)}.to be_true
end

Ответ 3

У вас есть два варианта.

Во-первых, вы могли бы жить только с утверждением, что модель недействительна, когда условия не были приняты.

Во-вторых, прекратите тестирование определенных сообщений об ошибках, указав свое собственное сообщение об ошибке:

fooobar.com/info/29317/...

Затем вы можете искать символ для сообщения об ошибке, а не текст сообщения об ошибке.