【发布时间】:2018-02-06 09:51:43
【问题描述】:
我从集成测试开始,我在我的开发环境中使用 Docker。
我已经安装了selenium-webdriver gem 和这个配置文件:
docker_ip = %x(/sbin/ip route|awk '/default/ { print $3 }').strip
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app,
:browser => :remote,
:url => "http://#{docker_ip}:4444/wd/hub")
end
Capybara.app_host = "http://#{docker_ip}:3010"
Capybara.server_host = '0.0.0.0'
Capybara.server_port = '3011'
当我运行集成测试时,它失败了,因为我使用 FactoryGirl(在测试数据库上创建)创建了一条记录,并且我的应用程序(在端口 3010 上)正在开发环境中运行。 Capybara 应该在测试环境中自行启动我的应用程序吗? 我做错了什么?
PS:当我运行docker-compose up时,我的应用程序在开发端启动
【问题讨论】:
-
如果你设置 Capybara.app_host,那是 Capybara 告诉浏览器连接的地方。因此,如果您的开发环境在端口 3010 上运行,则不应将 app_host 设置为端口 3010
-
但是如果我没有设置 app_host 我得到了一个达到的错误,capybara 无法连接到我的应用程序。应该怎么样?
-
app_host 需要设置 Capybara 将运行您的应用程序的地址。假设我理解你在做什么正确(在 docker 中运行浏览器/硒网格,但在本地机器上运行 capybara)然后
app_host将设置为http://#{the ip of your local machine accessible from docker}并且你将设置Capybara.always_include_port = true -
我的水豚也在 Docker 中运行
-
如果一切都在 Docker 中运行,那么您可能根本不需要指定
app_host,或者可能不需要指定http://#{docker_ip}并设置Capybara.always_include_port = true。它最终需要成为一个 ip,可以解析为您将 Capybara.server_host 设置为的任何接口之一(在您的情况下为 0.0.0.0,这意味着 docker 实例上的所有接口)
标签: ruby-on-rails ruby selenium capybara