2023 年 8 月 4 日星期五

从新应用 Gemfile 中省略 webdrivers 宝石,支持按行范围筛选测试,等等!

发布者 vipulnsward

嗨!我是 Vipul,为您带来本周 Rails 代码库更改的最新信息。

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

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

支持按行范围筛选测试

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

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

在 Postgres 15+ 中支持 NULLS NOT DISTINCT

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

以前的工作可以创建迁移中的索引,但 schema.rb 中不支持。此外,NULLS [NOT] DISTINCT 的匹配顺序不正确,这可能会导致不一致的架构检测。

提高 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 宝石

从 Selenium 4.6 开始,Selenium Manager 能够管理 Chrome Driver 的安装和集成。这使 webdrivers 宝石的需求过时。此提交进行了更改,从 Gemfile 模板中省略 webdrivers 宝石依赖,以便新生成的应用不再需要它。

添加 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 代码库做出了贡献!

我们下次再会!

订阅,我们将把这些更新发送到您的邮箱。