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 标准保持一致。
统计
组合
- 总提交次数: 369
- 合并的拉取请求: 98
- 52 位贡献者:Ace Dimasuhid、Alessandro Rodi、Alexander Panasyuk、Alyssa Ross、Andrew、Andrew Vit、Benoit Tigeot、Brad Charna、Brian Kephart、Christophe Bliard、Craig J. Bass、Daniel Colson、Douglas Lovell、Eric Hayes、Garett Arrowood、Gary Bernhardt、Gustav Munkby、James Crisp、Joel Taylor、Jon Rowe、Kenichi Kamiya、Koichi ITO、Lairan、Laura Paakkinen、Laurent Cobos、Magnus Bergmark、Matt Brictson、Maxim Krizhanovsky、Myron Marston、Nikola Đuza、Oleg Pudeyev、Olivier Lacan、Olle Jonsson、Pablo Brasero、Paul McMahon、Regan Chan、Sam Phippen、Sergiy Yarinovskiy、Shane Cavanaugh、Shia、Simon Coffey、Sorah Fukumori、Systho、Szijjártó-Nagy Misu、Tom Chen、Xavier Shay、Yuji Nakayama、arjan0307、joker1007、lsarni、n.epifanov、pavel
rspec-core
- 总提交次数: 94
- 合并的拉取请求: 24
- 17 位贡献者:Alyssa Ross、Andrew Vit、Benoit Tigeot、Garett Arrowood、Gary Bernhardt、Jon Rowe、Kenichi Kamiya、Koichi ITO、Magnus Bergmark、Myron Marston、Oleg Pudeyev、Olle Jonsson、Sam Phippen、Sorah Fukumori、Systho、Xavier Shay、arjan0307
rspec-expectations
- 总提交次数: 52
- 合并的拉取请求: 15
- 13 位贡献者:Ace Dimasuhid、Alyssa Ross、Benoit Tigeot、James Crisp、Jon Rowe、Kenichi Kamiya、Myron Marston、Pablo Brasero、Sam Phippen、Xavier Shay、Yuji Nakayama、joker1007、n.epifanov
rspec-mocks
- 总提交次数: 47
- 合并的拉取请求: 16
- 13 位贡献者:Alexander Panasyuk、Alyssa Ross、Andrew、Benoit Tigeot、James Crisp、Jon Rowe、Kenichi Kamiya、Maxim Krizhanovsky、Myron Marston、Olle Jonsson、Sam Phippen、Sergiy Yarinovskiy、Xavier Shay
rspec-rails
- 总提交次数: 132
- 合并的拉取请求: 27
- 29 位贡献者:Alessandro Rodi、Benoit Tigeot、Brad Charna、Brian Kephart、Christophe Bliard、Daniel Colson、Douglas Lovell、Eric Hayes、Joel Taylor、Jon Rowe、Kenichi Kamiya、Koichi ITO、Lairan、Laura Paakkinen、Laurent Cobos、Matt Brictson、Myron Marston、Nikola Đuza、Olivier Lacan、Paul McMahon、Regan Chan、Sam Phippen、Shane Cavanaugh、Shia、Simon Coffey、Szijjártó-Nagy Misu、Tom Chen、lsarni、pavel
rspec-support
- 总提交次数: 44
- 合并的拉取请求: 16
- 10 位贡献者:Alyssa Ross、Benoit Tigeot、Craig J. Bass、Gustav Munkby、James Crisp、Jon Rowe、Kenichi Kamiya、Myron Marston、Sam Phippen、Xavier Shay
文档
API 文档
Cucumber 功能
发行说明
rspec-core-3.8.0
增强功能
- 改进
RSpec::Core::RakeTask
和--bisect
使用的 shell 转义,使其适用于Pathname
对象。(Andrew Vit, #2479) - 在加载
--require
选项指定的 文件时遇到错误时,以良好的格式显示错误。(Myron Marston, #2504) - 通过将基于 shell 的运行器替换为使用分叉的运行器来大幅提高支持分叉的平台上
--bisect
的性能,这样 RSpec 和应用程序环境只需启动一次,而不是每个规范运行一次。(Myron Marston, #2511) - 提供配置 API 以选择用于
--bisect
的 bisect 运行器。通过在命令行中传递的--require
选项或在.rspec
中设置的选项加载的文件中,通过config.bisect_runner = :shell
或config.bisect_runner = :fork
选择运行器。(Myron Marston, #2511) - 支持 XDG 基本目录规范 用于全局选项文件。当在
$XDG_CONFIG_HOME/rspec/options
中找不到选项文件时,仍支持~/.rspec
(Magnus Bergmark, #2538) - 提取
RSpec.world.prepare_example_filtering
,该方法为自定义 RSpec 运行器设置示例过滤。(Oleg Pudeyev, #2552)
错误修复
- 在使用两个相同的回溯截断回溯时,防止出现
ArgumentError
。(Systho, #2515, Benoit Tigeot, #2539)
rspec-expectations-3.8.0
增强功能
- 通过将接收器包含为
SomeClass#some_message
来改进change(receiver, :message)
的失败消息。(Tomohiro Hashidate, #1005) - 改进
change
匹配器,使其能够正确检测深层嵌套的可变对象(例如数组-哈希-数组)中的更改。改进的逻辑使用前后hash
值来查看对象是否已被修改,而不是浅层复制对象。(Myron Marston, #1034) - 改进
include
匹配器,使其只要实现了to_hash
,就将伪哈希对象(例如使用SimpleDelegator
或类似方法装饰哈希的对象)视为哈希。(Pablo Brasero, #1012) - 将
max_formatted_output_length=
添加到配置中,允许更改截断大型输出字符串的长度。(Sam Phippen #951, Benoit Tigeot #1056) - 改进将不支持块期望的匹配器传递给基于块的
expect
时的错误消息。(@nicktime, #1066)
rspec-mocks-3.8.0
错误修复
- 在遇到无效的“计数”否定消息期望时,发出错误。(Sergiy Yarinovskiy, #1212)
- 确保
allow_any_instance_of
和expect_any_instance_of
可以被暂时抑制。(Jon Rowe, #1228) - 确保
expect_any_instance_of(double).to_not have_received(:some_method)
能够正常失败(因为不支持),而不是发出NoMethodError
。(Maxim Krizhanovsky, #1231)
rspec-rails-3.8.0
增强功能
- 在默认的
rails_helper.rb
中,当迁移挂起时,改进消息。(Koichi ITO, #1924) have_http_status
匹配器现在支持 Rails 5.2 风格的响应符号。(Douglas Lovell, #1951)- 更改生成的 Rails 助手以匹配 Rails 标准,以用于 Rails.root。(Alessandro Rodi, #1960)
- 对断言排队的作业没有附加等待时间提供支持。(Brad Charna, #1977)
- 缓存
stub_template
中使用的ActionView::Template
实例,由于减少了分配和设置,因此性能得到提高。(Simon Coffey, #1979) - Rails 脚手架生成器现在尊重更长的命名空间(例如 api/v1/<thing>)。(Laura Paakkinen, #1958)
错误修复
- 在为系统规格截图生成方法名称时,转义引号字符。(Shane Cavanaugh, #1955)
- 当未设置
fixture_path
时,使用相对路径来解析夹具。(Laurent Cobos, #1943) - 允许视图规格中使用自定义模板解析器。(@ahorek, #1941)
rspec-support-3.8.0
错误修复
- 在使用模拟调用时,在进行差异比较之前对哈希键进行排序,以提高差异准确性。(James Crisp, #334)