Ответ 1
В него включены и стандартные значения:
it { should validate_presence_of(:name).
with_message(/is not optional/) }
Я тестирую свои модели 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
отсутствует.
В него включены и стандартные значения:
it { should validate_presence_of(:name).
with_message(/is not optional/) }
Этот тест работает, это просто не так лаконично, как хотелось бы.
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
У вас есть два варианта.
Во-первых, вы могли бы жить только с утверждением, что модель недействительна, когда условия не были приняты.
Во-вторых, прекратите тестирование определенных сообщений об ошибках, указав свое собственное сообщение об ошибке:
Затем вы можете искать символ для сообщения об ошибке, а не текст сообщения об ошибке.