首页 > 解决方案 > Capybara 测试反向代理域

问题描述

我目前正在开发一个具有有趣设置的 Rails 应用程序。

我们在 heroku 上运行了两个应用程序。一个是作为反向代理工作的基本应用程序,它附加了多个域,并且它反向代理到我们的主应用程序,这是一个 rails 应用程序(此应用程序基于主机进行查找,然后进行路由)。

此设置的原因是允许自定义域指向主应用程序上的“商店页面”,然后这些商店页面指向原始域以进行结帐。

也许一个例子会更好地解释它,2个域:seller.com platform.com

platform.com 代表主应用程序的应用程序主机,seller.com 是通过反向代理路由的域。在 Seller.com 上,您选择您的产品,然后最终在 platform.com 上结账

在给定多个域的情况下,我们正在努力寻找一种方法来使用水豚在我们的主应用程序中测试这种端到端流程,有没有办法通过欺骗反向代理或仅使用多个主机来处理这个问题?

我试过的水豚配置如下

Capybara::Webkit.configure do |config|
  config.allow_unknown_urls
  config.ignore_ssl_errors
  config.skip_image_loading
  config.raise_javascript_errors = true
  config.allow_url("lvh.me")
  config.allow_url("*.lvh.me")
  config.allow_url("testdomain.me")
end

Capybara.configure do |config|
  config.always_include_port = true
  config.javascript_driver = :webkit
  config.default_max_wait_time = ENV.has_key?("CI") ? 60 : 10
  config.app_host = "http://lvh.me"
end

RSpec.configure do |config|
  config.include SubdomainHelper, type: :feature

  config.before(type: :request) do
    host! "lvh.me"
  end

  config.before(type: :feature) do
    default_url_options[:host] = "http://lvh.me:#{Capybara.server_port}"
  end
end

然后在测试中,我尝试了两者visit "http://testdomain.me"并将 capybara 主机设置为 testdomain Capybara.config.host = "http://testdomain.me"(不确定这种方法将如何工作,因为我需要两个域同时工作)

标签: ruby-on-railstestingrspeccapybaracapybara-webkit

解决方案


您使用的所有域和子域都需要设置为解析为您的 AUT 可访问的 IP 地址。这通常涉及编辑/etc/hosts或配置本地 DNS 服务器以报告正确的 ip。


推荐阅读