- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
rails 7.0.4
Rspec 3.11.0
capybara 3.37.1
selenium-webdriver (gem) 4.5.0
在 Gemfile 中使用 Ruby 调试(gem 'debug',平台:%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
我已将它隔离到这三个条件:
使用 Capybara.using_session 并在 using_session block 内使用 visit
访问页面(如果我删除 visit 或 using_session,它会起作用)
在同一套件的另一项测试中,使用 visit
访问任何其他页面(如果我删除了其他规范中的 visit
调用,它会起作用)
debug
gem (ruby-debug)(如果我从 Gemfile 中删除 gem 'debug', platforms: %i[ mri mingw x64_mingw ]
)
这是一个非常奇怪的错误。
我的 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 应用程序只有一个月的历史。
在这里,我已将应用程序损坏的地方取出并删除了所有其他内容(真的,我删除了所有内容但挂起仍然发生)。
我已将剩余代码与新生成的应用程序仔细比较,奇怪的是我无法在新应用程序中重现相同的错误(使用完全相同的规范和设置),因此它必须涉及我还看不到的第四个未知变量。
这里是简单的复制应用程序: https://github.com/jasonfb/StrangeCapybaraHang
此应用程序是作为我的应用程序的 FORK 创建的,然后我删除了所有非必要的内容。请注意,它几乎不包含任何内容,并且仅包含 1 个规范。
当我在此应用程序上运行 rspec(已损坏)时,请参阅“调试器:在进程 77726 后附加到子进程 77733”并且该套件在运行后挂起
在这里,在第二次尝试重现问题时,我尝试前进以创建错误:https://github.com/jasonfb/StrangeCapyHangForward
我设置了一个新的 Rails 应用程序,然后尝试重新创建上述所有条件以产生错误...但是...我无法在这个新应用程序中重现该错误!!
所以这意味着即使我已经确定了 bug 的 3 个元素,也必须有一个我还没有看到的第 4 个元素。
请注意,在此应用程序中,它与出现错误的其他存储库具有完全相同的规范(请参阅 spec/system/test_capy_hand_spec.rb)、完全相同的 rails_helper 文件、完全相同的 Gems 等。
但是,在这个应用程序上,我从来没有看到“调试器:在进程 77726 之后附加到子进程......”,即使 debug
Gem 在 Gemfile 中也是如此。 这是为什么?
我也没有看到挂起。
最佳答案
问题出在 selenium-webdriver
gem 中。从您的 StrangeCapybaraHang 项目中的 4.5.0 升级到 4.7.1,它应该会立即解决您的问题。
./bin/setup && yarn build
。请注意,如果 esbuild 未全局安装,您需要使用 yarn add esbuild
添加它,因为 package.json 中缺少它。selenium-webdriver
gem 降级到与 StrangeCapybaraHang 中相同的版本.例如,在您的 Gemfile 的 :test
组中:gem 'selenium-webdriver', '4.5.0'
捆绑安装 && rspec
。它挂了。selenium-webdriver
gem 的 Gemfile 示例# Gemfile of StrangeCapyHangForward
group :development, :test do
gem 'debug', platforms: %i[ mri mingw x64_mingw ]
gem 'rspec-rails'
# add the older version of the gem
gem 'selenium-webdriver', '4.5.0'
end
gem 'selenium-webdriver', '4.7.1'
添加到 StrangeCapyHangForward 中的 Gemfile .捆绑安装
rspec
。别再挂了!注意:您可能需要 grep 并终止现有的 rspec 进程。例如:
ps -ax | grep rspec
# take process ids for all the above and run (substituting 71529 for your pids):
kill -9 71529
selenium-webdriver
gem# Example Gemfile with working version of selenium-webdriver
group :development, :test do
gem 'debug', platforms: %i[ mri mingw x64_mingw ]
gem 'rspec-rails'
# add selenium-webdrive gem coded to 4.7.1
gem 'selenium-webdriver', '4.7.1'
end
我认为这个问题与并发性和 rspec 没有正确杀死
所有测试进程有关,尽管这很难确认。在我们强行升级许多 gem(包括依赖项)之前,我们的测试套件和并发性也遇到了很大的麻烦。
例如,在升级之前运行 rspec
几次并 grep 您的进程:ps -ax | grep rspec
.你会在那里看到很多现有的。我确实检查了 selenium-webdrive changelog看看是否有任何明显的原因会导致这种情况,但我什么也没看到。
无论如何,希望这对您有所帮助!祝你好运!
关于ruby-on-rails - Rails、Capybara.using_session(...)、访问页面和进行 ruby-debug 导致 rspec 套件在运行后似乎挂起,即使所有规范都通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74722080/
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!