Ruby on rails 用假网机械化

Ruby on rails 用假网机械化,ruby-on-rails,ruby,mechanize,Ruby On Rails,Ruby,Mechanize,我正在使用Mechanize从页面中提取链接。 为了便于开发,我使用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| p

我正在使用Mechanize从页面中提取链接。 为了便于开发,我使用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)
如果我不伪造标签的url,它会工作,因为page类现在是page

puts page.class # => Page

那么,如何使用fakeweb和mechanize来返回页面而不是文件对象呢?

使用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标志调用curl将在响应中包含标题。

使用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标志调用curl将在响应中包含标题。

添加选项:content\u type=>text/html your your FakeWeb.register\u uri call

您可以轻松修复添加选项:content\u type=>text/html your your FakeWeb.register\u uri call

如果您的答案接受度保持在这么低,人们将远离你的问题。如果你将答案的接受度保持在这么低的水平,人们将远离你的问题。谢谢你的回答。但是,上面的代码不是每次我运行时都会通过internet访问真实的站点吗?虽然curl带有option-我返回标题,但我的目标不是每次都上网,所以我有点喜欢使用FakeWeb选项。backticks中的代码将抛出并将响应存储在请求中。如果使用RSpec进行测试,则将前3行放在before:all块中,因此该站点将被调用一次。这将命中url,即使是一次。菲利佩的答案是正确的,没有错。只需从文件中加载一个假响应,而不是倒计时卷曲。谢谢你的回复。但是,上面的代码不是每次我运行时都会通过internet访问真实的站点吗?虽然curl带有option-我返回标题,但我的目标不是每次都上网,所以我有点喜欢使用FakeWeb选项。backticks中的代码将抛出并将响应存储在请求中。如果使用RSpec进行测试,则将前3行放在before:all块中,因此该站点将被调用一次。这将命中url,即使是一次。菲利佩的答案是正确的,没有错。只需从文件中加载一个假响应,而不必返回。