Сравнение сообщений об ошибках 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}"