errors.added? возвращает false при использовании с: exclusion - PullRequest
1 голос
/ 03 апреля 2020

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

validates :parent_entity, exclusion: { in: ->(entity) { [entity] } }

Это успешно, и установлена ​​ошибка исключения с правильным сообщением. Я могу подтвердить это через консоль rails.

В тесте Rspe c я хочу проверить, добавлена ​​ли соответствующая ошибка исключения:

it 'parent_entity cannot be same entity as child_entity' do
  @child_entity1.parent_entity = @child_entity1
  @child_entity1.valid?
  expect(@child_entity1.errors.added?(:parent_entity, :exclusion)).to be_truthy
end

В ходе теста не возвращается значение false. ожидание.

Предыдущий подход работает безупречно, например, для пустых ошибок, но не с исключением. Если я заменил ': exclusion' в тесте с исправленным сообщением об ошибке 'зарезервировано', я смогу заставить его работать, но это не то, что я хочу и должен делать.

1 Ответ

2 голосов
/ 03 апреля 2020

Взято из рельсов документов за добавленное? Метод:

Если в сообщении об ошибке требуются параметры, оно возвращает значение true с правильными параметрами или значение false с неправильными или отсутствующими параметрами.

Поэтому параметры должны быть полностью матч. Необходимая опция для :exclusion - это value и передается как последний параметр:

@child_entity1.errors.added?(:parent_entity, :exclusion, value: @child_entity1)
...