2023年8月4日 星期五

新应用 Gemfile 中省略 webdrivers gem,支持按行范围过滤测试以及更多!

由 vipulnsward 发布

大家好!我是 Vipul,为您带来本周 Rails 代码库最新更改的汇总。

引入 config.dom_testing_default_html_version 并使用 Rails::Dom::Testing 解析测试助手中的 HTML

之前,Rails::Dom::Testing 添加了对 HTML5 的支持。如果我们仍然希望依赖基于 HTML4 的测试,这可能会导致问题。此更改添加了一个新的配置选项 config.dom_testing_default_html_version,允许用户配置在测试助手解析 HTML 时使用的 HTML 版本 4/5。

支持按行范围过滤测试

此更改允许使用新的语法按行范围过滤测试。例如,以下命令运行从第 10 行到第 20 行的测试。

$ rails test test/models/user_test.rb:10-20

支持 PostgreSQL 15+ 中的 NULLS NOT DISTINCT

此更改为 PostgreSQL 15+ 索引添加了对 NULLS [NOT] DISTINCT 的全面支持。

之前已经完成了在 migration 中创建索引的工作,但 schema.rb 中不支持。此外,NULLS [NOT] DISTINCT 的匹配顺序不正确,这可能导致不一致的 schema 检测。

提高 JSON HTML 实体转义的性能

John 一直在对 .to_json 进行各种速度改进。此最新更改将 HTML 实体转义的性能提高了约 2 倍。总的来说,这些更改使 .to_json 的性能比 Rails 7.0 快约 4.5 倍。

允许在 ActionRecord::Sanitization#replace_named_bind_variables 中转义字面量冒号

此提交增加了在命名绑定变量时转义 sanitize_sql_* 方法中字面量冒号字符的能力。例如:

sanitize_sql_array(["TO_TIMESTAMP(:date, 'YYYY/MM/DD HH12\\:MI\\:SS')", date: "foo"])
#  => "TO_TIMESTAMP('foo', 'YYYY/MM/DD HH12:MI:SS')"

从 Gemfile 模板中省略 webdrivers gem

自 Selenium 4.6 起,Selenium Manager 能够管理 Chrome Driver 的安装和集成。这使得对 webdrivers gem 的需求变得过时。此提交对 Gemfile 模板进行了更改,以省略 webdrivers gem 依赖项,这样新生成的应用程序就不需要它了。

添加 Arel::FactoryMethods#cast(node, type)

CAST(field as type) 是一个广泛支持的 SQL 函数。此 PR 使用 cast(field, type) 辅助函数为该命名函数添加了本地 Arel 支持。

product_table = Product.arel_table
product_table.cast(product_table[:position], "integer")
# => CAST("products"."position" as integer)

在系统测试失败时保存屏幕截图路径

许多 CI 工具都支持在其 UI 中显示系统规范失败的屏幕截图。此 Pull Request 更改了 ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper,使其在失败时将屏幕截图路径保存在测试元数据中,CI 工具可以使用它来显示屏幕截图。

您可以在 此处查看所有更改。
上周,我们共有 27 位贡献者为 Rails 代码库做出了贡献!

下次再见!

订阅以通过邮件获取这些更新。