Nos*_*tap 5 ruby kerberos capybara phantomjs
我的测试尝试访问网页并验证页面上是否存在某些元素.例如,它访问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身份验证的关系?
的水豚文档示出了使用一个远程主机的一个例子.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
我很困惑app_host,但是在对Capybara源代码进行挖掘之后,似乎实际上并没有做太多.事实上,它似乎只在Capybara源代码中的一个地方使用:
if url_relative && Capybara.app_host
  url = Capybara.app_host + url
  url_relative = false
end
基本上,如果你传递一个像/posts/1/edit这样的方法的相对URL visit,Capybara将访问URL"#{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,这就是为什么你可以before { visit edit_post_path(1) }直接使用Capybara和Rails 编写代码的原因,而且你不必localhost每次都写.