У меня есть следующий метод, который отвечает за запрос URL-адреса и возвращает его Nokogiri::HTML
. Этот метод проверяет, определен ли прокси-сервер, и если он это сделает, он будет звонить OpenURI
open
с опциями прокси или без них.Как проверить этот метод?
Реализация
require 'open-uri'
require 'nokogiri'
class MyClass
attr_accessor :proxy
# ....
def self.page_content(url)
if MyClass.proxy
proxy_uri = URI.parse(MyClass.proxy)
Nokogiri::HTML(open(url, :proxy => proxy_uri)) # open provided by OpenURI
else
Nokogiri::HTML(open(url)) # open provided by OpenURI
end
end
end
Я понятия не имею, как я должен писать тесты, доказывающие следующее:
- Когда прокси определен запрос OpenURI делает на самом деле использует прокси-данные
- Когда прокси-сервер не определен, выполняется обычное не-прокси-соединение
Вот что я придумал для начала тестов.
describe MyClass, :vcr do
describe '.proxy' do
it { should respond_to(:proxy) }
end
describe '.page_content' do
let(:url) { "https://google.com/" }
let(:page_content) { subject.page_content(url) }
it 'returns a Nokogiri::HTML::Document' do
page_content.should be_a(Nokogiri::HTML::Document)
end
# How do i test this method actually uses a proxy when it's set vs not set?
context 'when using a proxy' do
# ???
xit 'should set open-uri proxy properties' do
end
end
context 'when not using a proxy' do
# ???
xit 'should not set open-uri proxy properties' do
end
end
end
end
Что означает 'open' в вашей реализации? –
@PeterAlfvin 'open' предоставляется OpenURI. Я прокомментирую код, чтобы это было четко указано. – CharlesHorse
Вы действительно хотите открыть URI и вызвать Nokogiri как часть вашего теста или вы хотите просто убедиться, что вы делаете эти вызовы (например, с помощью заглушек)? –