Тестирование пользовательского исключения с единственным ожиданием? - PullRequest
1 голос
/ 06 апреля 2019

У меня есть функция, которую я хочу протестировать, вызывает исключение на входе, но это исключение также несет некоторую информацию, а не просто простое сообщение, и я тоже хочу это проверить.Так что я сделал что-то вроде , как видно из документации rspec :

it 'raises the correct exception' do
   expect { my_call }.to raise_error do |error|
     expect(error.some_field).to eq('some data')
   end
end

Это прекрасно работает, однако работает против RSpec/MultipleExpectations cop:

RSpec/MultipleExpectations: Example has too many expectations [2/1]

Из того, что я могу сказать, невозможно использовать raise_error в блочной форме, как это без более чем одного ожидания, так что дает?Есть ли какой-нибудь способ как-то сохранить возбужденное исключение за пределами примера, чтобы я мог специфицировать его нормально, не делая ничего ужасного, включая rescue в спецификации?Или я должен использовать пользовательские raise_custom_error matcher?

1 Ответ

0 голосов
/ 06 апреля 2019

Rubocop по умолчанию, я думаю, включает предупреждение, которое вы видите, которое говорит, что есть только один expect в каждом it блоке. Вы можете отключить это в rubocop.yml, добавив это:

# Disables "Too many expectations."
RSpec/MultipleExpectations:
  Enabled: false

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

# rubocop:disable RSpec/MultipleExpectations
it 'raises the correct exception' do
  expect { my_call }.to raise_error do |error|
    expect(error.some_field).to eq('some data')
  end
end
# rubocop:enable RSpec/MultipleExpectations

it 'does something else' do
  expect(true).to be true
end

Дополнительные параметры синтаксиса rubocop см. Этот ответ

...