0

我们一直难以弄清楚如何让 Selenium JavaScript 测试与我们的 Dockerised Ruby (Hanami) 应用程序一起工作。对于不依赖于 JavaScript 的规范示例,当然,Capybara-default Rack::Test 驱动程序就足够了,但是每个现代应用程序都依赖于 JavaScript 做某件事或另一件事,我们的应用程序现在/将来也不例外。

我已经在 SO 上阅读了一些答案,并开始在 GitHub 上寻找随机的类似项目,但我们已经在这里停止了越来越多的政治上不可持续的时间长度。

总结一下:

  1. 如果在同一调用中没有运行非 JS 规范,我们可以成功运行使用 JavaScript 的特性规范。rake(我们jbodah/minitest-tagz用来过滤规范调用);
  2. 在运行我们的全套规范时,Firefox Marionette 在运行启用 JavaScript 的示例时挂起,其日志消息表明它没有应该连接的 IP 地址。

我们只找到了一组非常有限的教程/演练,这些教程/演练显然适用,到 2018 年大部分时间已经很长了。我们最公然崇拜的两个是

  1. Ahmet Kizilay 于 2016 年 2 月使用 dockerized Selenium 和 Capybara 进行集成测试;
  2. Dockerized Rails Capybara 在 Selenium 之上进行测试,Alfredo Motta 于 2016 年 5 月。

很可能,或者至少很可能,我们一直在误读或掩饰这些现在正在咬我们的东西。还值得注意的是,Docker 内部结构,尤其是与网络相关的内部结构,在过去两年中似乎发生了重大变化,这可能与我们的问题有关。

我在Gist中包含了以下文件的副本,因为它们的汇总太多,无法粘贴到此处:

  1. 00-Capybara-Selenium-Docker-confusion__readme.md:这个问题陈述;
  2. 01-docker-compose.yml:docker-compose.yml申请文件;
  3. 02-run_tests.shscripts/run_tests.sh文件中指定的作为容器command运行的文件;webdocker-compose
  4. 03-features_helper.rb:每个功能规范所需的`spec/features_helper';主要关注 Selenium 设置;
  5. 04-Dockerfile:Dockerfile用于构建web容器;
  6. 05-join_as_member_spec.rb:在应用程序中使用 JavaScript 的功能规范之一;
  7. 06-focused_logfile.logdocker-compose up --exit-code-from web:仅运行 JavaScript 执行规范示例的终端输出;
  8. 07-unfocused_logfile.log:在启用所有规范中的所有示例的情况下运行相同调用的终端输出docker-compose(即,不限于使用tag :focus)。

任何有用的评论和/或对现有工作测试设置的指针(无论使用什么框架,例如 Rails)都将不胜感激。谢谢。

4

1 回答 1

1

最后!我们以一种非常出乎意料的方式解决了这个问题。下面是我们刚刚推送到项目 repo 的提交的文本(不包括静态分析报告样板)。感谢所有人的有益评论,特别是Reddit 上的 /u/nyekks

修复不是 Selenium 问题的 Selenium 问题

路很长,从那里到这里……

我们已经追了好几天了,不管有多少,试图弄清楚为什么我们的 Selenium JavaScript 测试显然会破坏 Docker。最终,我们在 Reddit、StackOverFlow 和 Gitter 上发布了求助请求;此 Gist的所有变体(和引用)。

事实证明,问题(完全)不在于 Selenium、Capybara、Docker 和/或三者之间的交互。@mitpaladin最终发现了一个随机化种子 (15474),当通过TESTOPTS传递给 Rake in 的环境变量指定它时scripts/run_tests.sh,会产生一个绿色条。这很有趣,但不一定直接有用;通过证明至少有 1 in ((2**333) - 1) 的机会出现绿色条,测试本身并没有无可挽回地破坏任何东西。(但是,使用当地彩票的机会要好得多。)当我们都进行了进一步的在线研究时,@mitpaladin 再次出现,找到了多个 StackOverflow 答案,就像这个直接将(中)手指指向... DatabaseCleaner所有的事情。公平地说,他们的 README稍微提到了这个问题,但是,如果您还不知道这就是您要查找的内容,那么即使您阅读了它,您也可能不会三思而后行。

DatabaseCleaner.strategy将from更改:transaction:deletion允许一切正常工作;进行更改后,我们立即获得了一个绿色条。(在 中DB_CLEANER_STRATEGY定义了一个常量spec/spec_helper.rb,但是,以防万一我们需要再次更改它。)

现在,也许我们可以重新振作起来,弄清楚在这个新通过的功能规范之后我们想要完成什么!这几天前。

于 2018-10-12T16:17:51.190 回答