Rspec rubocop error `предпочитаю использовать проверяющие двойники по сравнению с обычными - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть тест RSpec

let(:mail_instance) { double(deliver_later: nil) }

before do
  allow(ConfirmationMailer).to receive(:send_email).and_return(mail_instance)
  allow(mail_instance).to receive(:deliver_later)
end

it 'calls mailer, and delivers the mail' do
  call_endpoint
  expect(mail_instance).to have_received(:deliver_later)
end

И он хорошо работает, но у меня ошибка rubocop - prefer using verifying doubles over normal doubles. В соответствии с документами https://www.rubydoc.info/gems/rubocop-rspec/1.7.0/RuboCop/Cop/RSpec/VerifiedDoubles я должен использовать вместо этого instance_double, но если я изменю его, мои спецификации будут падать с ошибкой:

Ожидается ArgumentError: Module or String, получил {: delivery_later=> ноль}

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Идея в том, что вы должны использовать instance_double, но я думаю, что важно понять, почему Рубокоп так говорит.

Основное различие между doubles и instance_doubles заключается в том, что мы пытаемся объявитьметод, который НЕ реализуется классом проверяемого экземпляра, он вызовет исключение. Если мы решим использовать фиктивные объекты в наших тестах, instance_doubles дает нам немного больше уверенности в наших тестах, чем если бы мы использовали шпионы или обычные удвоения.

Так что если в будущем кто-то переименует или удалит этот метод,если вы используете double, вы, вероятно, никогда не узнаете об этом, и ваш пропуск пройдет, но если вы используете instance_doubles, вы будете уведомлены.

Очевидно, что между ними есть компромисс между производительностью, но в 99% случаев для менялучше использовать instance_doubles

0 голосов
/ 06 ноября 2019

Вам нужно передать класс, который вы оформили, на instance_double:

let(:mail_instance) { instance_double(ActionMailer::MessageDelivery, deliver_later: nil) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...