Повышение OpenURI :: HTTPError вызвало ошибочное количество аргументов - PullRequest
3 голосов
/ 28 ноября 2011

Я проверяю, как метод обрабатывает исключение 302 HTTPError.Я попытался заглушить вызов одного метода, чтобы вызвать один программно, однако он продолжает жаловаться, что ошибочное количество аргументов (0 для 2)

код проверял эту конкретную строку:

document = Nokogiri.HTML open(source_url)

и в спецификации я обозначил это так:

subject.stub(:open).and_raise(OpenURI::HTTPError)
subject.should_receive(:ended=).with(true)
subject.update_from_remote

Я не думаю, что это связано с Nokogiri.HTML () или Open-uri.open (), так почему это происходит?

Кроме того, как бы я попытался сделать этот HTTPError как ошибку перенаправления 302?Спасибо

Ответы [ 2 ]

6 голосов
/ 29 ноября 2011

Я обнаружил, что конструктору OpenURI :: HTTPError требуется два параметра. Rspec по умолчанию вызовет новый метод класса ошибки без параметра, который вызывает эту ошибку. Поэтому мне нужно вручную создать объект ошибки, передав необходимые параметры.

exception_io = mock('io')
exception_io.stub_chain(:status,:[]).with(0).and_return('302')          
subject.stub(:open).with(anything).and_raise(OpenURI::HTTPError.new('',exception_io))
1 голос
/ 23 января 2014

Это очень поздний ответ, но для тех, кто может найти это полезным: если вы используете драгоценный камень FakeWeb в сочетании с Nokogiri, вы можете проводить такого рода тестирование, не вмешиваясь в него. внутренности кода. Вы можете зарегистрировать URI в FakeWeb в своем тесте и указать, что нужно вернуть. Например:

FakeWeb.register_uri(:get, 'http://www.google.com', :status => ['404', 'Not Found'])

Указанный вами аргумент URI должен соответствовать URI, который вызывает ваш метод. Затем FakeWeb перехватит вызов и вернет предоставленный вами статус.

...