如何测试使用mechanize的ruby应用程序

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

我写了一个小程序,用mechanize来遍历一个站点。

我想为它编写测试,但不希望它每次运行测试时都登录到网站上。

这里有一个小例子

require 'rubygems'
require 'mechanize'
require 'test/unit'

def my_code_to_find_links
  google = WWW::Mechanize.new.get('http://www.google.com')
  # ...
  # some code to figure out which liks it wants
  # ...
  google.links
end

class TestGoogle < Test::Unit::TestCase
  def test_first_link_is_images
    assert_equal 'Images' , my_code_to_find_links.first.text
  end
end

提问于
用户回答回答于

使用Fakeweb来剔除互联网响应。

对于Google的示例,首先访问网站并保存所需页面的html。

那么你的代码是

stream = File.read("saved_google_page.html")
FakeWeb.register_uri(:get, 
    "http://www.google.com", 
    :body => stream, 
    :content_type => "text/html")
agent = Mechanize.New
page = agent.get("http://www.google.com/")

用户回答回答于

mechanize = stub('WWW::Mechanize')
WWW::Mechanize.stubs(:new).returns(mechanize)
mechanize.stubs(:get).with('http://www.google.com').returns('What ever out put you are expecting so that you can test')

如果你不使用mcoha,那么你需要安装它

sudo gem install mocha

并在你的测试中

require 'rubygems'
require 'mocha'

扫码关注云+社区