Повторно использовать сообщение об ошибке в rspec custom matcher - PullRequest
0 голосов
/ 18 октября 2019

У меня есть пользовательское сопоставление, которое использует ожидаемые значения в своем блоке совпадений (код здесь упрощен)

RSpec::Matchers.define :have_foo_content do |expected|
  match do |actual|
    expect(actual).to contain_exactly(expected)
    expect(actual.foo).to contain_exactly(expected.foo)
  end
end

Обычно сообщение об ошибке будет выглядеть так:

       expected collection contained:  ["VLPpzkjahD"]
       actual collection contained:    ["yBzPmoRnSK"]
       the missing elements were:      ["VLPpzkjahD"]
       the extra elements were:        ["yBzPmoRnSK"]

Но когдаиспользуя собственный сопоставитель, он только печатает это, и важные данные отладки теряются:

expected MyObject to have_foo_content "foobar"

Итак, возможно ли повторно использовать сообщение об ошибке из блока сопоставления в качестве сообщения об ошибке? Я знаю, что могу предоставить пользовательские сообщения об ошибках с

failure_message do |actual|
  # ...
end

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

1 Ответ

1 голос
/ 18 октября 2019

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

Если вы все еще хотите использовать существующий метод, существует частный метод, которыйВы можете позвонить, и он вернет сообщение об ошибке по умолчанию. Вам может потребоваться установить некоторые переменные экземпляра expected_value, actual_value и т. Д.

RSpec::Matchers::BuiltIn::ContainExactly.new(expected_value).failure_message

ссылочный код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...