bounty将在7天后过期。回答此问题可获得+200声望奖励。Jason FB希望引起更多人对此问题的关注:这是我第一次在堆栈溢出的帖子上提供奖金。要获得奖金,您的答案必须导致从头开始重新创建错误(就像我对github.com/jasonfb/StrangeCapyHangForward所做的那样),这样我们就知道了第四个未知数是什么。实际上,您可以克隆或派生github.com/jasonfb/StrangeCapyHangForward,然后使用该repo添加bug(这是违反直觉的),但肯定会识别出第四个未知变量。
导轨7.0.4
风险规范3.11.0
水豚3.37.1
在宝石文件中使用Ruby调试(gem 'debug', platforms: %i[ mri mingw x64_mingw ]
)
每当我试图添加Capybara.using_session
调用时,我的套件就会挂起。它在完成所有规范后挂起,即使通过也是如此。
我的驱动程序设置为:
Capybara.default_driver = :selenium_chrome_headless
但我注意到如果我将驱动程序更改为Capybara.default_driver = :selenium_chrome
也会发生这种情况
以下是重现它的规范:
require 'rails_helper'
describe "client app", type: :feature do
describe "when starting the experience", type: :feature do
# TODO: figure out why capy is hanging here
it "can load the home page" do
# THIS CAUSES AFTER-RSPEC HANG even though all specs pass
Capybara.using_session("client session") do
visit "/"
end
end
it "loads with a client id" do
visit '/'
end
end
end
我将其分离为***以下三种***情况:
1.使用Capybara.using_session并使用using_session块中的visit
访问页面(如果我删除了visit或using_session,它就可以工作)
1.在同一套件中的另一个测试中,使用visit
访问任何其他页面(如果我删除其他规范中的visit
调用,它就可以工作)
debug
gem(ruby-debug)(如果我从gem文件中删除gem 'debug', platforms: %i[ mri mingw x64_mingw ]
)
这是一个非常奇怪的错误。
Capy Hang看起来像:
我的spec/rails_helper.rb
文件是
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/rspec'
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
RSpec.configure do |config|
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
end
Capybara.default_driver = :selenium_chrome_headless
重要提示:虽然我已经隔离到这里,但奇怪的是,我无法进一步隔离它,甚至无法在新的Rails应用程序中重现它,尽管这个Rails应用程序才成立一个月。
在这里,我已经采取了应用程序的地方,它是坏的,删除其他一切(真的,我删除了一切,挂起仍然发生)。
我已经仔细地将剩余的代码与新生成的应用程序进行了比较,奇怪的是,我无法在新应用程序中重现相同的错误(使用完全相同的规范和设置),因此它必须涉及我还看不到的第4个未知变量。
生殖
裸骨复制应用程序在这里:https://github.com/jasonfb/StrangeCapybaraHang
这个应用程序是作为我的应用程序的一个分支创建的,然后我删除了所有不必要的东西。注意,它几乎什么都不包含,只有一个规范。
当我在这个应用程序上运行rspec时(已损坏),请参见“调试器:在进程77726派生到子进程77733后附加”并且套件在运行
后挂起
在这里,在第二次尝试重现问题时,我尝试 * 前进 * 以创建bug:https://github.com/jasonfb/StrangeCapyHangForward
我安装了一个新的Rails应用程序,然后尝试重新创建上面解释的所有条件,以产生错误...但是...我无法在这个新应用程序中重现错误!!
所以这意味着即使我已经确定了bug的3个元素,也一定有第4个元素我还没有看到。
请注意,在此应用程序中,它与显示错误的其他存储库具有完全相同的规范(请参见spec/system/test_capy_hand_spec.rb)、完全相同的rails_helper文件、完全相同的Gems等。
但是,在这个应用程序上,我从来没有看到“调试器:在进程77726派生到子进程之后附加....”,即使debug
Gem在Gemfile中也是如此。为什么会这样?
我 * 也 * 没有看到挂。
提供的边界2022-12-14(200个堆栈溢出点)
这是我第一次在堆栈溢出的帖子上提供奖励。要获得奖励,您的答案必须导致从头开始重新创建错误(就像我对https://github.com/jasonfb/StrangeCapyHangForward所做的那样),这样我们就知道了第四个未知数是什么。实际上,您可以克隆或派生https://github.com/jasonfb/StrangeCapyHangForward,然后使用该repo添加bug(这是违反直觉的),但肯定会识别出第四个未知变量。
2条答案
按热度按时间chhqkbe11#
问题出在
selenium-webdriver
gem中,您的测试项目中当前的版本是4.5.0,如果升级到4.7.1,应该可以立即解决您的问题。步骤
1.将
gem 'selenium-webdriver', '4.7.1'
添加到宝石文件中。bundle install
1.运行
rspec
。不再挂起!注:您可能需要grep并终止现有的rspec进程。例如:
我相信这个问题与并发性和rspec没有正确地
kill
所有的测试过程有关,尽管这很难确认,我们的测试套件和并发性也有很大的问题,直到我们强制升级了许多gem(包括依赖项)。例如,在升级之前,运行
rspec
几次并grep您的进程:ps -ax | grep rspec
。您将在那里看到许多现有的。我确实检查了selenium-webdrive changelog,以查看是否有任何明显的问题会导致此问题,但我没有看到任何问题。重现
请注意,如果您将较旧的gem添加到您的工作存储库中,则会重现该问题:
然后,
bundle install && rspec
。它将挂起。总之,希望这能帮上忙!祝你好运!
hmae6n7t2#
尝试删除debug gem,因为它可能导致了水豚的问题。