Я недавно работал с драгоценным камнем Mechanize и хотел бы включить некоторые тесты, чтобы убедиться, что я уловил правильные ошибки. Каков правильный способ проверки ошибок?Каков правильный способ проверки ошибок?
Это мой основной метод:
def get(str)
url = format_url(str)
#puts "sending GET request to: #{url}"
sleep(0.1)
@page = Mechanize.new do |a|
a.user_agent_alias = 'Mac Safari'
a.open_timeout = 7
a.read_timeout = 7
a.idle_timeout = 7
a.redirect_ok = true
end.get(url)
rescue Mechanize::ResponseCodeError => e
puts "#{'Response Error:'.red} #{e}"
rescue SocketError => e
puts "#{'Socket Error:'.red} #{e}"
rescue Net::OpenTimeout => e
puts "#{'Connection Timeout:'.red} #{e}"
rescue Errno::ETIMEDOUT => e
puts "#{'Connection Timeout:'.red} #{e}"
rescue Net::HTTP::Persistent::Error
puts "#{'Connection Timeout:'.red} read timeout, too many resets."
end
И это начало испытаний для обработки ошибок:
class TestErrorHandling < Mechanize::TestCase
context 'Example when sending a GET request' do
should 'rescue error and return nil' do
assert_equal nil, Example.get('http://localhost/pagethatdoesntexist')
end
end
end
Могу ли я отправиться в правильном направлении? Любые идеи и/или ресурсы приветствуются.
ха-ха, ответить отредактирован, прежде чем я ударил -1 – akostadinov
@jjk спасибо за ваш ответ. Некоторое основание для этого - мой искатель получил все типы ошибок в прошлом, будь то попытка достичь страницы, которая не существует, или просто таймаут соединения. Механизация поднимает каждую из ошибок должным образом, я хочу проверить обработку. – binarymason
, поэтому, если вам нужно быть явным, вы создадите макет-объект, полагающийся на каждый из этих базовых объектов. Тогда вы можете справиться с ними, чтобы подняться или что-то еще. Вы заметили, что я использую двойной экземпляр rspec для создания интерфейса, который я могу использовать. Тогда я могу ссылаться на это в экземпляре моего макета. Если это полезно, отметьте этот ответ как правильный. – jjk