2024 年 5 月 3 日,星期五

Rails 控制台增强,无断言测试报告等更多功能!

Greg 发布

嗨,我是 Greg。让我们了解本周 Rails 代码库中的更改。

在 IRB 的最新官方 API 上构建 Rails 控制台
Rails 控制台是在 IRB 基础上构建的,但由于缺少扩展 API,因此它通过补丁程序对其进行扩展。由于 IRB 最近收到了很多改进和一个扩展 API,因此此 Pull 请求将 Rails 控制台更改为基于此进行构建。这将使 Rails 帮助程序在帮助消息中显示,其中还有其他好处。

将 app:update 变成一个添加 –force 的命令
此 Pull 请求将 app:update 任务更改为一个 Rails 命令,然后为其添加 --force 标记,以允许运行 bin/rails app:update,同时接受它做出的所有更改。

修复对于具有复合主键的模型的 includes+references 的计数查询
由于 SQLite 和较旧的 MySQL 不支持将 COUNT DISTINCT 与多列一起使用,因此使用复合主键运行计数查询会导致错误。此 Pull 请求将其更改为使用子查询。

允许报告无断言测试
非常容易编写实际什么都不测试的“假阳性”错误测试(或者将来可能变成这样)。一个简单的示例

def test_active
  active_users = User.active.to_a
  active_users.each do |user|
    assert user.active?
  end
end

仅在作用域返回至少一个用户时才运行断言。此 Pull 请求中的更改允许轻松检测何时不运行此类断言。在以下配置下,无断言测试将被标记为失败,而不是静默通过。

config.active_support.assertionless_tests_behavior = :raise # also available :ignore and :log

在 ActiveRecord 中添加对递归公共表表达式的支持
尽管 Rails 7.1 已添加对编写公共表表达式 (CTE) 的支持,但此支持并未扩展到递归 CTE。此 Pull 请求添加了一个 QueryMethods#with_recursive 构造,以启用递归 CTE。

向 PostgreSQL 适配器添加 Date 解码器
此 Pull 请求向 PostgreSQL 适配器添加了一个 Date 解码器,以在连接级别对日期进行类型转换,因此当运行原始查询时,列将被转换为日期而不是字符串。之前

ActiveRecord::Base.connection.select_value("select '2024-01-01'::date").class 
#=> String

之后

ActiveRecord::Base.connection.select_value("select '2024-01-01'::date").class 
#=>  Date 

此更改使 PostgreSQL 适配器在(日期方面)与 Mysql2 适配器保持一致。

删除所有已弃用的代码
此 Pull 请求从代码库中删除了 7.1 中所有已弃用的代码。

您可以在此处查看完整更改列表 here上周有 30 位贡献者 参与了 Rails 代码库的开发!

下次再见!

订阅,以接收通过邮件发送的这些更新信息。