我正在测试一个执行webscraping的模块。
我有这种方法可以抓取一个页面的robots.txt文件。
def download_robots_file(page)
Net::HTTP.get(URI("#{page}robots.txt"))
rescue StandardError => ex
log_info('robot_file', ex)
end
我有这个测试。第一个规范确保方法可以安全地失败,第二个测试包含实际要下载页面时发生的情况。我所做的是从mcnn.com下载robots.txt文件并将其存储在本地。我复制了文件并砍掉了最后一位(“robots.txt”),以便我的方法行为正常。我承认,有点奇怪。我愿意接受更好的办法。
describe '#download_robots_file(page)' do
it "returns if there's no page" do
@dummy.stub(:log_info).and_return("No Robots.txt file exists.")
page = ''
@dummy.download_robots_file(page).should == "No Robots.txt file exists."
end
it "returns the robots file if it exists" do
page = './spec/data/cnn_' #gotta be better way!
robots_file = File.open('./spec/data/cnn_robots.txt', "r")
expected_page = robots_file.read
@dummy.stub(:log_info)
@dummy.download_robots_file(page).should == expected_page
end
end
我的问题是:
答案 0 :(得分:3)
我使用FakeWeb
gem存根调用Net::HTTP
- 非常适合模拟具有预期响应主体的HTTP请求。
答案 1 :(得分:2)
答案 2 :(得分:1)
在我看来,您不应该测试Net::HTTP
是否正常工作,而应该测试是否使用正确的参数调用它。
URI::HTTP.expects(:URI).with("page")
Net::HTTP.expects(:get)
@dummy.download_robots_file(page)