【发布时间】:2013-08-12 16:15:10
【问题描述】:
我有以下方法负责请求 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 提供。我将注释代码以明确说明。 -
您是想实际打开 URI 并调用 Nokogiri 作为测试的一部分,还是只想确保您正在进行这些调用(即使用存根)?
-
@PeterAlfvin 我不知道这个问题的答案。对不起——这对我来说很新鲜。我认为答案是我只是想确保我正在拨打这些电话。我不知道它是否应该通过存根。
标签: ruby rspec nokogiri open-uri