如何为Webrat,Mechanize设置“基本URL”

时间:2011-03-21 19:40:48

标签: ruby cucumber mechanize webrat mechanize-ruby

我想指定一个基本URL,所以我不必总是指定绝对URL。如何指定要使用的Mechanize的基本URL?

2 个答案:

答案 0 :(得分:3)

要使用Webrat完成之前提供的答案,您可以执行以下操作:在您的Cucumber env.rb中:

require 'webrat'

Webrat.configure do |config|
  config.mode = :mechanize
end

World do
  session = Webrat::Session.new
  session.extend(Webrat::Methods)
  session.extend(Webrat::Matchers)
  session.visit 'http://yoursite/yourbasepath/'
  session
end

为了使其更加健壮,例如在不同环境中使用,您可以这样做:

ENV['CUCUMBER_HOST'] ||= 'yoursite'
ENV['CUCUMBER_BASE_PATH'] ||= '/yourbasepath/'

# Webrat
require 'webrat'

Webrat.configure do |config|
  config.mode = :mechanize
end

World do
  session = Webrat::Session.new
  session.extend(Webrat::Methods)
  session.extend(Webrat::Matchers)
  session.visit('http://' + ENV['CUCUMBER_HOST'] + ENV['CUCUMBER_BASE_PATH'])
  session
end

请注意,如果您使用的是Mechanize,Webrat也将无法遵循您的重定向,因为它无法正确解释当前主机。要解决此问题,您可以在上面添加session.header('Host', ENV['CUCUMBER_HOST'])

要确保在任何地方都使用正确的路径进行访问和匹配,请将ENV['CUCUMBER_BASE_PATH'] +添加到paths.rb中paths_to方法的开头(如果您使用它)。它应该是这样的:

  def path_to(page_name)
    ENV['CUCUMBER_BASE_PATH'] + 

    case page_name

道歉,如果有人收到一些电子邮件 - 我最初试图发表评论,Stack Overflow令人烦恼的用户界面让我变得更好。

答案 1 :(得分:1)

对于Mechanize,您指定的第一个URL将被视为基本URL。例如:

require "rubygems"
require "mechanize"

agent = Mechanize.new
agent.get("http://some-site.org")

# Subsequent requests can now use the relative path:

agent.get("/contact.html")

这样您只需指定一次基本网址。