RSpec 3.8 已发布!

Myron Marston 和 Jon Rowe

2018 年 8 月 4 日

RSpec 3.8 刚刚发布!考虑到我们对 语义版本控制 的承诺,对于所有已经使用 RSpec 3 的用户来说,这应该是一个简单的升级,但如果我们引入了任何回归,请告知我们,我们会尽快发布一个包含修复程序的补丁版本。

我们也很高兴地宣布,Benoit Tigeot 自上次发布以来加入了 RSpec 团队。欢迎加入团队,Benoit!我们知道你会做得很棒:)。

RSpec 仍然是一个社区驱动的项目,来自世界各地的贡献者参与其中。此版本包含来自 52 位不同贡献者的 369 次提交和 98 个合并的拉取请求!

感谢所有帮助实现此版本发布的人!

重大变更

核心:--bisect 的性能已大幅提升

RSpec 3.3 以来,RSpec 就支持 --bisect 功能。当您的测试套件存在顺序依赖关系时,此功能很有用,也就是说,只有在按特定顺序运行测试时,套件才会失败。--bisect 会反复运行越来越小的套件子集,以将其缩减为重现失败所需的最小规格集。

自 3.3 以来,此功能一直通过向 rspec 命令发出 shell 命令来运行每个子集来实现。虽然简单且有效,但我们意识到这种方法效率也很低。每次 rspec 命令运行时,都必须从头开始启动 RSpec 和您的应用程序环境(可能包括 Rails 和许多其他 gems)。这方面的成本可能会有很大差异,从几百毫秒到大型 Rails 应用程序上的 30 多秒不等。在极端情况下,--bisect 的运行时间可能会被一次又一次地启动应用程序环境所需的时间所主导。

在 RSpec 3.8 中,我们通过在支持它的平台上使用分叉而不是发出 shell 命令来提高 bisect 的性能。这样,我们可以一次启动应用程序环境,然后分叉一个子进程来运行测试套件的每个子集,从而避免了多次启动应用程序的需要。

您在实践中看到的实际改进差异很大,但在我们 有限的测试 中,它将 --bisect 的运行时间在一个案例中提高了 33%,而在另一个案例中提高了一个数量级(从 108.9 秒降至 11.7 秒)。

如果您希望最大程度地利用此更改的优势,您可能需要在运行二分搜索时传递一些额外的 --require 选项,以便预加载尽可能多的应用程序环境。

核心:支持 XDG 基本目录规范进行配置

RSpec 与许多命令行工具一样,支持使用选项文件,这些文件可以位于 .rspec(用于团队项目选项)、~/.rspec(用于全局个人选项)或 .rspec-local(用于个人项目选项 - 此文件不应在源代码控制下)。在 RSpec 3.8 中,我们已扩展此功能以支持 XDG 基本目录规范,该规范定义了一种标准方法,供工具定位全局个人选项文件。这使用户可以完全控制此文件的位置,而不是强制将其放在其主目录中。

要使用此功能,只需设置 $XDG_CONFIG_HOME 环境变量,并将您的 RSpec 选项放在 $XDG_CONFIG_HOME/rspec/options 中。

有关更多信息,请阅读规范查看拉取请求

感谢 Magnus Bergmark 实现了此功能!

期望:格式化输出长度现在可配置

在对大型对象设置期望时,它们的字符串表示可能会变得相当笨拙,并可能使控制台输出混乱。在 RSpec 3.6 中,我们开始截断这些对象以解决此问题,但没有使其易于配置。

在 RSpec 3.8 中,您现在可以配置它

RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.max_formatted_output_length = 200
  end
end

您还可以通过将配置选项设置为 nil 来完全禁用截断。

Rails:have_http_status 匹配器已升级以支持 Rails 5.2

Rails 5.2 中的一项更改导致 RSpec 的 have_http_status 匹配器发出弃用警告。在 RSpec 3.8 中,这些警告已被删除。

Rails:视图规格 stub_template 性能得到提升。

感谢 Simon Coffey 为 stub_template 实现了缓存功能,该功能可防止不必要地重新创建模板。这通过减少分配和执行的设置量来提高性能。

Rails:rails_helper.rb 改进

感谢 Koichi ITO 和 Alessandro Rodi 改进了我们生成的 rails_helper.rb,其中包含迁移挂起时的改进消息,并将我们与 Rails 标准保持一致。

统计

组合

rspec-core

rspec-expectations

rspec-mocks

rspec-rails

rspec-support

文档

API 文档

Cucumber 功能

发行说明

rspec-core-3.8.0

完整变更日志

增强功能

错误修复

rspec-expectations-3.8.0

完整变更日志

增强功能

rspec-mocks-3.8.0

完整变更日志

错误修复

rspec-rails-3.8.0

完整变更日志

增强功能

错误修复

rspec-support-3.8.0

完整变更日志

错误修复