我们一直难以弄清楚如何让 Selenium JavaScript 测试与我们的 Dockerised Ruby (Hanami) 应用程序一起工作。对于不依赖于 JavaScript 的规范示例,当然,Capybara-default Rack::Test 驱动程序就足够了,但是每个现代应用程序都依赖于 JavaScript 做某件事或另一件事,我们的应用程序现在/将来也不例外。
我已经在 SO 上阅读了一些答案,并开始在 GitHub 上寻找随机的类似项目,但我们已经在这里停止了越来越多的政治上不可持续的时间长度。
总结一下:
- 如果在同一调用中没有运行非 JS 规范,我们可以成功运行使用 JavaScript 的特性规范。
rake
(我们jbodah/minitest-tagz
用来过滤规范调用); - 在运行我们的全套规范时,Firefox Marionette 在运行启用 JavaScript 的示例时挂起,其日志消息表明它没有应该连接的 IP 地址。
我们只找到了一组非常有限的教程/演练,这些教程/演练显然适用,到 2018 年大部分时间已经很长了。我们最公然崇拜的两个是
- Ahmet Kizilay 于 2016 年 2 月使用 dockerized Selenium 和 Capybara 进行集成测试;和
- Dockerized Rails Capybara 在 Selenium 之上进行测试,Alfredo Motta 于 2016 年 5 月。
很可能,或者至少很可能,我们一直在误读或掩饰这些现在正在咬我们的东西。还值得注意的是,Docker 内部结构,尤其是与网络相关的内部结构,在过去两年中似乎发生了重大变化,这可能与我们的问题有关。
我在Gist中包含了以下文件的副本,因为它们的汇总太多,无法粘贴到此处:
00-Capybara-Selenium-Docker-confusion__readme.md
:这个问题陈述;01-docker-compose.yml
:docker-compose.yml
申请文件;02-run_tests.sh
:scripts/run_tests.sh
文件中指定的作为容器command
运行的文件;web
docker-compose
03-features_helper.rb
:每个功能规范所需的`spec/features_helper';主要关注 Selenium 设置;04-Dockerfile
:Dockerfile
用于构建web
容器;05-join_as_member_spec.rb
:在应用程序中使用 JavaScript 的功能规范之一;06-focused_logfile.log
docker-compose up --exit-code-from web
:仅运行 JavaScript 执行规范示例的终端输出;07-unfocused_logfile.log
:在启用所有规范中的所有示例的情况下运行相同调用的终端输出docker-compose
(即,不限于使用tag :focus
)。
任何有用的评论和/或对现有工作测试设置的指针(无论使用什么框架,例如 Rails)都将不胜感激。谢谢。