我们一直很沮丧,试图弄清楚如何通过我们的Dockerized Ruby(Hanami)应用程序进行Selenium JavaScript测试。当然,对于不依赖JavaScript的规范示例,Capybara默认的Rack :: Test驱动程序就足够了,但是每一个现代应用都依赖JavaScript来做一件事情,而我们的应用也一样。>
我已经在SO上阅读了一些答案,并开始在GitHub上搜索以寻找类似的随机项目,但是在这里,由于政治上越来越不可持续的时间,我们已经停下来了。
总结:
rake
调用中运行了 no 非JS规范,则我们可以成功运行使用JavaScript的功能规范。 (我们使用jbodah/minitest-tagz
来过滤规范调用); 我们只发现了非常有限的一组教程/演练,这些教程/演练显然是适用的,到2018年大部分时间都是徒劳的。我们最狂热地学习的两个是这样的
很可能,或者至少是可能性,我们一直在误读或掩饰这些东西,这些东西现在正困扰着我们。还值得注意的是,在过去两年中,尤其是与网络相关的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”;主要与硒设置有关; 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),都将受到极大的赞赏。谢谢。
答案 0 :(得分:0)
最后!我们以高度意外的方式解决了问题。以下是我们刚刚推送到项目存储库中的提交的文本(不包括静态分析报告模板)。感谢所有人的宝贵意见,尤其是/u/nyekks on Reddit。
修复不是硒问题的硒问题
这条路很漫长,从那里到这里...
我们一直在追逐尾巴,几天没关系,试图弄清楚为什么我们的Selenium JavaScript测试显然破坏了Docker。最终,我们在Reddit,StackOverFlow和Gitter上发布了求助请求; (和引用)this Gist的所有变体。
结果发现问题并非(完全)存在于Selenium,Capybara,Docker和/或这三者之间的交互。 @mitpaladin最终发现了一个随机种子(15474),当通过
TESTOPTS
中传递给Rake的scripts/run_tests.sh
环境变量指定该种子时,它将产生一个绿色条。那很有趣,但不一定直接有用。通过证明至少有(in(2 ** 333)-1)出现绿条的可能性为1,测试本身并不是无法挽回的破坏任何东西。 (但是,您使用本地彩票的机会要好得多。)当我们俩都进行进一步的在线研究时,@ mitpaladin再次出现,找到了多个this one之类的StackOverflow答案,这些答案直接使(中指)指向。 .. DatabaseCleaner的所有事物。公平地说,他们的自述文件lightly touches on是问题所在,但是,如果您还不知道这是您要查找的内容,即使您阅读了该书,也可能不会三思而后行。将
DatabaseCleaner.strategy
从:transaction
更改为:deletion
可以正常工作;进行更改后,我们立即获得了绿色的奖励。 (DB_CLEANER_STRATEGY
中定义了一个spec/spec_helper.rb
常量,但是,以防万一,我们需要再次对其进行更改。)现在,也许我们可以重新思考一下,在这个新通过的功能规范之后,我们想完成什么!这些天前。