我正在測試一個可以進行webscraping的模塊。努力在Rspec測試中僞造Web數據
我有這種方法抓取頁面的robots.txt文件。
def download_robots_file(page)
Net::HTTP.get(URI("#{page}robots.txt"))
rescue StandardError => ex
log_info('robot_file', ex)
end
而且我有這個測試。第一個規範確保該方法可以安全地失敗,第二個測試涵蓋了實際下載頁面時發生的情況。我所做的是從cnn.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
我的問題是:
- 這是一個很好的策略,用於測試download_robots_file方法是否正常工作?
- 如果不是,有什麼更好的方法來做到這一點?
- 有沒有比在第一次測試中使用「.and_return」代碼更好的方法?