Сравнение сообщений об ошибках ActiveRecord rspec:: RecordInvalid
В модели следующее:
validates_uniqueness_of :title,
if: proc { |item| item.item_type == 'tag' },
case_sensitive: false,
message: I18n.t('errors.key', value: "%{value}")
и пытается проверить в rspec следующее:
expect { xxx }.to raise_error(
ActiveRecord::RecordInvalid,
I18n.t('errors.key', value: '...passing the title...')
)
Задерживается очень близко:
ActiveRecord::RecordInvalid with "translated error",
got #<ActiveRecord::RecordInvalid: Validation failed: translated error>
Ожидание ожидает значения без котировки, в то время как отправленное значение имеет котировку; он не работает на этом
Я получаю ту же самую ошибку с настройкой по умолчанию:
activerecord:
errors:
models:
item:
attributes:
title:
taken: 'translated error'
Тот же тест проходит следующим образом:
expect { xxx }.to raise_error
expect { xxx }.to raise_error( ActiveRecord::RecordInvalid )
Так же, используя настройку по умолчанию:
Спасибо, если какая-либо помощь на этом
Ответы
Ответ 1
ActiveRecord добавляет префикс Validation failed:
к сообщению об ошибке. Вместо этого попробуйте это в своем тесте:
expect { xxx }.to raise_error(
ActiveRecord::RecordInvalid,
"Validation failed: " + I18n.t('errors.key', value: '...passing the title...')
)
Вы можете изменить это значение по умолчанию, установив следующий ключ в своем языковом файле:
en:
activerecord:
errors:
messages:
record_invalid: "Validation failed: %{errors}"