Как установить «базовый URL» для Webrat, Mechanize - PullRequest
1 голос
/ 21 марта 2011

Я хотел бы указать базовый URL, чтобы не всегда указывать абсолютные URL. Как я могу указать базовый URL для использования в Mechanize?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Чтобы выполнить ранее предложенный ответ с помощью Webrat, вы можете сделать следующее, например, в env.rb вашего Cucumber:

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

Чтобы сделать его более надежным, например, для использования в различных средах, вы могли быdo:

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_to в путях.рб, если ты им пользуешься.Это должно выглядеть так:

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

    case page_name

Извинения, если кто-то получил от этого несколько писем - я изначально пытался опубликовать комментарий, и раздражающий пользовательский интерфейс Stack Overflow одолел меня.

1 голос
/ 03 июня 2011

Для 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")

Таким образом, базовый URL указывается только один раз.

...