Rails 5.0.1系统测试无法恢复运行,是否需先完成项目升级再处理测试?
我完全理解你现在的困扰——旧项目的测试依赖链卡壳确实让人头疼,尤其是浏览器驱动这种和外部环境强绑定的部分。先别急着直接放弃测试,咱们可以试试这几个方向,说不定能把测试跑起来:
用容器化方案绕过本地浏览器安装难题
既然直接在本地装Chrome 114已经行不通,不如试试Docker拉取包含对应版本Chrome的现成镜像,比如专门适配旧测试环境的chromium:114或google-chrome-stable:114.0.5735.90镜像。把项目目录挂载到容器里,在隔离的容器环境中运行测试命令,这样不用在本地折腾旧浏览器的安装,能保证依赖完全匹配。尝试匹配兼容版本的Firefox与Geckodriver
新版本Firefox不兼容旧版Capybara,但你可以找和Capybara 3.6.0适配的旧Firefox版本(比如Firefox 65-70区间的版本),同时搭配对应的Geckodriver(比如0.29.0版本,和Selenium 3.6.0兼容)。可以去Mozilla的归档库下载旧Firefox安装包,然后在测试配置里指定驱动版本和浏览器路径:# 在rails_helper.rb或spec_helper.rb中添加 Webdrivers::Geckodriver.required_version = '0.29.0' ENV['FIREFOX_PATH'] = '/path/to/your/old/firefox'临时调整测试依赖版本尝试兼容
可以试试微调依赖版本,比如把selenium-webdriver降到3.4.x版本(需确认和Capybara 3.6.0的兼容性),或者给webdriversgem设置环境变量锁定Chrome版本:ENV['CHROME_VERSION'] = '114.0.5735.90'不过这个方法可能需要找第三方镜像源获取已被谷歌移除的驱动包,稳定性不如前两个方案。
如果以上方法都试过还是走不通,再考虑先升级项目核心依赖再处理测试也不迟:
你可以先把Rails从5.0.1.rc2升级到5.0系列的最终稳定版(5.0.7),这个版本的改动很小,风险可控;接着逐步升级capybara、selenium-webdriver、webdrivers到能兼容现代浏览器的版本,这样测试环境就能正常运行了。毕竟项目升级是早晚要做的事,提前解决核心依赖的兼容性问题,后续的测试和功能开发也会更顺畅。
备注:内容来源于stack exchange,提问作者daveasdf_2

