将app_host设置为Capybara的内容

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

She*_*ter 8

水豚文档示出了使用一个远程主机的一个例子.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
Run Code Online (Sandbox Code Playgroud)


GMA*_*GMA 8

我很困惑app_host,但是在对Capybara源代码进行挖掘之后,似乎实际上并没有做太多.事实上,它似乎只在Capybara源代码中的一个地方使用:

if url_relative && Capybara.app_host
  url = Capybara.app_host + url
  url_relative = false
end
Run Code Online (Sandbox Code Playgroud)

基本上,如果你传递一个像/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"
Run Code Online (Sandbox Code Playgroud)

默认情况下,RSpec设置app_hosthttp://localhost,这就是为什么你可以before { visit edit_post_path(1) }直接使用Capybara和Rails 编写代码的原因,而且你不必localhost每次都写.