2009-12-09 2 views
1

Я использую Mechanize для извлечения ссылок со страницы. Чтобы облегчить разработку, я использую fakeweb для выполнения сверхбыстрого ответа, чтобы получить меньше ожидания и раздражения при каждом прогоне кода.Механизировать с помощью FakeWeb

tags_url = "http://website.com/tags/" 
FakeWeb.register_uri(:get, tags_url, :body => "tags.txt") 

agent = WWW::Mechanize.new 
page = agent.get(tags_url) 
page.links.each do |link| 
    puts link.text.strip 
end 

Когда я запускаю приведенный выше код, он говорит:

nokogiri_test.rb:33: undefined method `links' for #<WWW::Mechanize::File:0x9a886e0> (NoMethodError) 

После осмотра класс объекта

puts page.class # => File 

страницы Если я не поддельный вне tags_url, его работает с тех пор, как класс страницы сейчас Page

puts page.class # => Page 

Итак, как я могу использовать fakeweb с mechanize для возврата страницы вместо объекта File?

+3

Если вы держите свой уровень приема ответа на этот низкий, люди будут держаться подальше от ваших вопросов. – Geo

ответ

7

Используйте FakeWeb переигрывать запрос HTTP опережающей выборки:

tags_url = "http://website.com/tags/" 
request = `curl -is #{tags_url}` 
FakeWeb.register_uri(:get, tags_url, :response => request) 

agent = WWW::Mechanize.new 
page = agent.get(tags_url) 
page.links.each do |link| 
    puts link.text.strip 
end 

Вызов локон с флагом -i будет включать заголовки в ответ.

+0

Спасибо 4 ур ответ. Но разве этот код не попадает на настоящий сайт через Интернет каждый раз, когда я его запускаю? хотя curl с опцией -i возвращает заголовок, моя цель заключалась не в том, чтобы каждый раз попадала в интернет, поэтому мне нравится использовать FakeWeb. – Autodidact

+0

нет. код в backticks shells out и сохраняет ответ в 'request'. Вы помещаете первые 3 строки в блок 'before (: all), если вы тестируете RSpec, поэтому сайт будет вызываться один раз. –

+0

Это ударит по URL-адресу, даже если это один раз. Ответ Фелипе правильный. – dgmora

5

Вы можете легко исправить, добавив опцию :content_type => "text/html" вы ваш FakeWeb.register_uri вызов

 Смежные вопросы

  • Нет связанных вопросов^_^