将app_host设置为Capybara的内容

时间:2013-11-15 00:38:15

标签: ruby capybara phantomjs kerberos

我的测试尝试访问网页并验证网页上是否存在某些元素。例如,它访问http://foo.com/homepage.html并检查徽标图片,然后访问http://bar.com/store/blah.html并检查页面上是否显示某些文字。我的目标是访问Kerberos经过身份验证的网页。

我发现Kerberos代码如下:

主要文件

uri = URI.parse(Capybara.app_host)
kerberos = Kerberos.new(uri.host)
@kerberos_token = kerberos.encoded_token

kerberos.rb文件

class Kerberos
    def initialize(host)
      @host = host
      @credentials = AuthGss::Negotiate.new("HTTP@#{@host}")
      @credentials.cache = ENV['KRB5CCNAME'] if ENV['KRB5CCNAME']
      @token = @credentials.step("")
    end

    def encoded_token
      Base64.encode64(@token).gsub(/\n/,"")
    end
  end

它使用Capybara.app_host值。我无法弄清楚要设置Capybara.app_host值的内容。我无法弄清楚它的作用。我有Capybara.run_server = false。有人可以帮助我了解如何使用Capybara.app_host以及这与Kerberos身份验证的关系吗?

2 个答案:

答案 0 :(得分:7)

Capybara docs显示使用远程主机的示例。 app_host是您的Web应用程序的基本主机:

Capybara.current_driver = :selenium
Capybara.run_server = false
Capybara.app_host = 'http://www.google.com'

visit('/users') # goes to http://www.google.com/users

答案 1 :(得分:7)

我对app_host感到困惑,但是在对Capybara源代码进行挖掘之后,它似乎并没有真正做到这么多。实际上,它似乎只在Capybara源代码one place中使用:

if url_relative && Capybara.app_host
  url = Capybara.app_host + url
  url_relative = false
end

基本上,如果您将/posts/1/edit之类的相对网址传递给visit这样的方法,Capybara会访问网址“#{Capybara.app_host} / posts / 1 / edit`。所以以下内容两段代码是等价的:

# 1:
Capybara.app_host = "https://stackoverflow.com"
visit "/questions/19991349"

# 2:
visit "https://stackoverflow.com/questions/19991349"

默认情况下,RSpec将app_host设置为http://localhost,这就是为什么你可以在开箱即用的时候使用Capybara和Rails编写像before { visit edit_post_path(1) }这样的代码,而你不需要每次都写localhost