RSpec 2.99 和 3.0 RC1 已发布!
Myron Marston
2014 年 5 月 18 日RSpec 团队发布了 3.0.0.rc1 和 2.99.0.rc1!除非出现新的重大问题,否则这将是最后一个预发布版本,我们将在两周内发布 2.99.0 和 3.0.0 正式版。
如果您要将项目从 2.x 升级,请查看升级说明。
如果您对 RSpec 3 的新功能感到好奇,请在几天内查看 - 我将在不久的将来发布 RSpec 3 中所有显著变化的完整列表。
感谢所有帮助实现此版本发布的贡献者!
发布说明
rspec-core 2.99.0.rc1
增强功能
- 添加
--deprecation-out
CLI 选项,该选项将弃用警告重定向到指定的文件。(Myron Marston) - 反向移植对元数据中
skip
的支持,以跳过示例的执行。(Xavier Shay,#1472) - 添加
Pathname
支持以设置所有输出流。(Aaron Kromer) - 添加
test_unit
和minitest
期望框架。(Aaron Kromer)
弃用
- 弃用
RSpec::Core::Pending::PendingDeclaredInExample
,使用SkipDeclaredInExample
代替。(Xavier Shay) - 当从嵌套的
describe <SomeClass>
示例组中访问described_class
时发出弃用警告,因为described_class
将在 RSpec 3 中返回最内层的描述类,而不是最外层的描述类,就像它在 RSpec 2 中的行为一样。(Myron Marston) - 弃用
RSpec::Core::FilterManager::DEFAULT_EXCLUSIONS
、RSpec::Core::FilterManager::STANDALONE_FILTERS
和在这些过滤器上使用#empty_without_conditional_filters?
。(Sergey Pchelincev) - 弃用
RSpec::Core::Example#options
,使用RSpec::Core::Example#metadata
代替。(Myron Marston) - 在将符号或哈希作为第一个参数传递给
describe
或context
时发出警告。在 RSpec 2.x 中,这将被视为元数据,但在 RSpec 3 中,它将被视为描述的对象。要继续将其视为元数据,请在符号或哈希之前传递描述。(Myron Marston) - 弃用
RSpec::Core::BaseTextFormatter::VT100_COLORS
和RSpec::Core::BaseTextFormatter::VT100_COLOR_CODES
,使用RSpec::Core::BaseTextFormatter::ConsoleCodes::VT100_CODES
和RSpec::Core::BaseTextFormatter::ConsoleCodes::VT100_CODE_VALUES
代替。(Jon Rowe) - 弃用
RSpec::Core::ExampleGroup.display_name
,使用RSpec::Core::ExampleGroup.description
代替。(Myron Marston) - 弃用
RSpec::Core::ExampleGroup.describes
,使用RSpec::Core::ExampleGroup.described_class
代替。(Myron Marston) - 弃用
RSpec::Core::ExampleGroup.alias_example_to
,使用RSpec::Core::Configuration#alias_example_to
代替。(Myron Marston) - 弃用
RSpec::Core::ExampleGroup.alias_it_behaves_like_to
,使用RSpec::Core::Configuration#alias_it_behaves_like_to
代替。(Myron Marston) - 弃用
RSpec::Core::ExampleGroup.focused
,使用RSpec::Core::ExampleGroup.focus
代替。(Myron Marston) - 为
config.filter_run :focused
添加弃用警告,因为示例别名fit
和focus
将不再包含:focused
元数据,但将继续包含:focus
元数据。(Myron Marston) - 弃用按
:line_number
过滤(例如,来自 CLI 的--line-number
)。使用位置过滤代替。(Myron Marston) - 弃用
--default_path
作为--default-path
的替代方案。(Jon Rowe) - 弃用
RSpec::Core::Configuration#warnings
,使用RSpec::Core::Configuration#warnings?
代替。(Myron Marston) - 弃用
share_examples_for
,使用shared_examples_for
或shared_examples
代替。(Myron Marston) - 弃用
RSpec::Core::CommandLine
,使用RSpec::Core::Runner
代替。(Myron Marston) - 弃用
#color_enabled
、#color_enabled=
和#color?
,使用#color
、#color=
和#color_enabled? output
代替。(Jon Rowe) - 弃用
#filename_pattern
,使用#pattern
代替。(Jon Rowe) - 弃用
#backtrace_cleaner
,使用#backtrace_formatter
代替。(Jon Rowe) - 弃用修改
RSpec::Configuration#formatters
。(Jon Rowe) - 弃用
stdlib
作为可用的期望框架,使用test_unit
和minitest
代替。(Aaron Kromer)
错误修复
- 当您过迟设置
config.deprecation_stream
导致它无法生效时发出警告,因为报告器已设置。(Myron Marston) - 带块的
skip
不应执行块。(Xavier Shay)
rspec-core 3.0.0.rc1
3.0.0 的重大更改
- 更改
described_class
,以便在像describe MyClass
这样的嵌套组中,它返回MyClass
而不是外部组的描述类。(Myron Marston) - 重构过滤器管理器,使其不再是 Hash 的子类,并具有更严格、更面向领域的接口。(Sergey Pchelincev)
- 从
BaseTextFormatter
中删除旧的色彩定义。(Jon Rowe) - 从
BaseTextFormatter
中删除控制台颜色定义。(Jon Rowe) - 重新构造示例组元数据,以便计算出的键直接暴露在元数据哈希中,而不是在嵌套的
:example_group
子哈希中。此外,父示例组元数据现在可作为[:parent_example_group]
使用,而不是[:example_group][:example_group]
。通过旧键结构的弃用访问仍然提供。(Myron Marston) - 删除
:describes
元数据键。它毫无理由地重复:described_class
。通过:describes
的弃用访问仍然提供。(Myron Marston) - 将
:example_group_block
元数据键重命名为:block
。(Myron Marston) - 删除已弃用的
RSpec::Core::Example#options
。(Myron Marston) - 将
BaseTextFormatter#colorize_summary
移动到SummaryNotification#colorize_with
(Jon Rowe)。 describe some_hash
在 RSpec 2.x 中将some_hash
视为元数据,但在 RSpec 3.0 中将将其视为描述的对象。元数据必须始终放在描述参数之后。(Myron Marston)- 删除已弃用的
display_name
别名,使用ExampleGroup.description
代替。(Myron Marston) - 删除已弃用的
describes
别名,使用ExampleGroup.described_class
代替。(Myron Marston) - 删除已弃用的
RSpec::Core::ExampleGroup.alias_it_behaves_like_to
。使用RSpec::Core::Configuration#alias_it_behaves_like_to
代替。(Myron Marston) - 删除已弃用的
RSpec::Core::ExampleGroup.alias_example_to
。使用RSpec::Core::Configuration#alias_example_to
代替。(Myron Marston) - 删除
focused
示例别名,并将示例/组别名fit
、focus
、fcontext
和fdescribe
改为不再包含:focused => true
元数据。它们现在只包含:focus => true
元数据。这意味着您需要使用filter_run :focus
而不是filter_run :focused
来过滤它们。(Myron Marston) - 删除
--line-number
过滤。它在语义上是模棱两可的,因为它是一个全局过滤器(可能应用于多个文件),但多个文件中相同行号之间没有有意义的联系。相反,使用rspec path/to/spec.rb:23:46
形式,它更简洁,并且更有意义,因为它作用于一个文件。(Myron Marston) - 删除
--default_path
作为--default-path
的别名。(Jon Rowe) - 删除已弃用的
share_examples_for
。仍然有shared_examples
和shared_examples_for
。(Myron Marston) - 将
RSpec::Core::Configuration#warnings
重命名为RSpec::Core::Configuration#warnings?
,因为它是一个布尔标志。(Myron Marston) - RSpec 的全局状态不再在规格运行后重置。这为备用运行器提供了更多灵活性,让他们决定何时以及是否要重置状态。备用运行器现在负责调用此方法(或执行类似的重置),如果他们在同一进程中多次运行规格套件。(Sam Phippen)
- 将
RSpec::Core::CommandLine
(从未正式声明为公开)合并到RSpec::Core::Runner
中。(Myron Marston) - 删除
color_enabled
作为color
的别名。(Jon Rowe) - 删除
backtrace_cleaner
作为backtrace_formatter
的别名。(Jon Rowe) - 删除
filename_pattern
作为pattern
的别名。(Jon Rowe) - 将对旧版格式化程序的支持提取到
rspec-legacy_formatters
中。(Jon Rowe) RSpec::Configuration#formatters
现在返回一个 dup,以防止修改。(Jon Rowe)- 用
test_unit
和minitest
替换stdlib
作为可用的期望框架。(Aaron Kromer) - 从
BaseTextFormatter
中删除回溯格式化帮助器。(Jon Rowe) - 将探查器支持提取到
ProfileFormatter
和ProfileNotification
中。如果格式化程序希望响应--profile
,则应实现dump_profile
。(Jon Rowe) - 将剩余的格式化程序状态提取到报告器和通知中。引入
ExamplesNotification
以共享以前保存在BaseFormatter
中的有关示例的信息。(Jon Rowe)
增强功能
- 添加
config.default_formatter
属性,该属性可用于设置仅在没有其他格式化程序设置时(例如,通过--formatter
)使用的格式化程序。(Myron Marston) - 在
LegacyFormatterAdaptor
中支持旧版颜色定义。(Jon Rowe) - 将
execution_result
(由元数据公开)从哈希迁移到具有适当属性的第一类对象。status
现在存储并作为符号而不是字符串返回。它保留旧版哈希行为以实现向后兼容。(Myron Marston) - 为格式化程序提供控制台代码帮助器。(Jon Rowe)
- 使用原始 Ruby 哈希而不是哈希的子类来表示元数据哈希。现在提前计算已计算的元数据条目,而不是在首次访问时延迟计算。(Myron Marston)
- 将
:block
元数据条目添加到示例元数据中,与示例组元数据中的:block
保持一致。(Myron Marston) - 添加
fspecify
和fexample
作为specify
和example
的别名,并带有:focus => true
元数据,与fit
保持一致。(Myron Marston) - 添加对
colorize_summary
的旧版支持。(Jon Rowe) - 重新构造运行器,以便它可以在子类中更容易地自定义以实现备用运行器。(Ben Hoskings)
- 将
RSpec::Core::ConfigurationOptions
文档作为正式支持的公共 API。(Myron Marston) - 添加
--deprecation-out
CLI 选项,该选项将弃用警告重定向到指定的文件。(Myron Marston) expect_with :stdlib
(现在可作为expect_with :minitest
使用)与 Minitest 5 兼容。(Xavier Shay)- 报告器现在通过
StartNotification
和SummaryNotification
通知格式化程序 RSpec 和您的规格的加载时间。(Jon Rowe) - 添加
disable_monkey_patching!
配置选项,该选项会禁用您使用的任何 RSpec 部分的所有猴子补丁。(Alexey Fedorov) - 添加
Pathname
支持以设置所有输出流。(Aaron Kromer) - 添加
config.define_derived_metadata
,它可以用于对所有与给定过滤器匹配的组或示例应用额外的元数据。(Myron Marston) - 通过
FailedExampleNotification
提供格式化和着色的回溯,并在错误是由于您预期失败的通过规格导致时发送PendingExampleFixedNotifications
。(Jon Rowe) - 将
dump_profile
添加到格式化程序 API,以允许格式化程序实现对--profile
的支持。(Jon Rowe) - 允许使用 RSpec “状态”(例如
:success
、:failure
)而不是直接的颜色代码通过ConsoleCodes
对文本进行着色。(Jon Rowe) - 在格式化程序通知对象上公开
fully_formatted
方法,这使自定义格式化程序可以轻松生成类似于 rspec-core 的格式化输出。(Myron Marston)
错误修复
- 修复由
rspec --init
生成的spec_helper.rb
文件,以便推荐的设置在运行一个文件时正确使用文档格式化程序。(Myron Marston) - 修复了在拆除模拟后生成描述导致出现意外异常的排序问题。(Bradley Schaefer, Aaron Kromer, Andrey Savchenko)
- 允许使用符号作为隐式主体 (例如
describe :foo
)。(Myron Marston) - 防止在已经处于上下文环境中时创建隔离上下文 (即使用
RSpec.describe
)。这样做没有理由,而且可能会导致意外错误。(Xavier Shay) - 修复了共享示例组的作用域,以便当两个共享示例组在嵌套上下文的不同级别共享相同名称时,使用最近上下文的那个。(Myron Marston)
- 修复了
--warnings
选项,以便它立即启用警告,以便它适用于由--require
加载的文件。(Myron Marston) - 当您过迟设置
config.deprecation_stream
导致它无法生效时发出警告,因为报告器已设置。(Myron Marston) - 将完整的
RSpec::Core::Example
接口添加到传递给around
钩子的参数中。(Myron Marston) - 在使用过滤器运行规范时,行号始终优先。(Xavier Shay)
- 确保 :if 和 :unless 元数据过滤器被视为特殊情况,并且始终有效。(Bradley Schaefer)
- 确保当 Rake 任务向
rspec
发出 shell 命令时,使用当前正在运行的 RSpec 安装,即使也安装了更新的版本。(Postmodern) - 使用旧的格式化程序作为默认值不再会导致无限循环。(Xavier Shay)
rspec-expectations 2.99.0.rc1
弃用
- 弃用 DSL 定义的自定义匹配器上的
matcher_execution_context
属性。(Myron Marston) - 弃用
RSpec::Matchers::Pretty#_pretty_print
。(Myron Marston) - 弃用
RSpec::Matchers::Pretty#expected_to_sentence
。(Myron Marston) - 弃用
RSpec::Matchers::Configuration
,改用RSpec::Expectations::Configuration
。(Myron Marston) - 弃用在不响应
xyz?
或xyzs?
的对象上的be_xyz
谓词匹配器。(Daniel Fone) - 弃用在不响应
has_xyz?
的对象上的have_xyz
匹配器。(Daniel Fone) - 弃用在具有私有方法
has_xyz?
的对象上的have_xyz
匹配器。(Jon Rowe) - 当使用不通过
supports_block_expectations?
明确支持块期望的匹配器时,发出关于块期望表达式的弃用警告。(Myron Marston) - 弃用
require 'rspec-expectations'
。改用require 'rspec/expectations'
。(Myron Marston)
rspec-expectations 3.0.0.rc1
3.0.0 的重大更改
- 从 DSL 定义的自定义匹配器中删除
matcher_execution_context
属性。(Myron Marston) - 删除
RSpec::Matchers::Pretty#_pretty_print
。(Myron Marston) - 删除
RSpec::Matchers::Pretty#expected_to_sentence
。(Myron Marston) - 将
RSpec::Matchers::Configuration
常量重命名为RSpec::Expectations::Configuration
。(Myron Marston) - 防止
have_xyz
谓词匹配器使用私有方法。(Adrian Gonzalez) - 块匹配器现在必须实现
supports_block_expectations?
。(Myron Marston) - 停止支持
require 'rspec-expectations'
。改用require 'rspec/expectations'
。(Myron Marston)
错误修复
- 修复当在测试环境中加载
YARD
时,beta2 触发的NoMethodError
。(Myron Marston) - 修复
be_xyz
匹配器以接受do...end
块。(Myron Marston) - 修复可组合匹配器错误消息生成逻辑,以便在给定
$stdout
或$stderr
时不会爆炸。(Myron Marston) - 修复
change
匹配器以与IO
对象正常工作。(Myron Marston) - 修复
exist
匹配器,以便它可以用于涉及不实现exist?
或exists?
的对象的组合匹配器表达式。(Daniel Fone) - 修复可组合匹配器匹配逻辑,以便它在使用匹配器之前克隆匹配器,以便与使用基于给定
actual
值的内部记忆的匹配器正常工作。(Myron Marston) - 修复
be_xyz
和has_xyz
谓词匹配器,以便它们可以用于涉及不实现谓词方法的对象的组合匹配器表达式。(Daniel Fone)
增强功能
- 记录剩余的公共 API。rspec-expectations 现在具有 100% 的公共 API 文档,并将保持这种状态 (因为新的未记录方法将导致构建失败)。(Myron Marston)
- 改进
eq
匹配器错误消息中 BigDecimal 对象的格式。(Daniel Fone) - 改进
be_xyz
谓词匹配器的错误消息,以便它包含接收者的inspect
输出。(Erik Michaels-Ober, Sam Phippen) - 添加
all
匹配器,允许您指定给定匹配器是否匹配集合中的所有元素:expect([1, 3, 5]).to all( be_odd )
。(Adam Farhi) - 为复合运算符 (
and
/or
) 添加布尔别名 (&
/|
)。(Adam Farhi) - 当用户在块期望表达式中错误地使用值匹配器时 (例如
expect { 3 }.to eq(3)
) 或反之亦然时,为用户提供清晰的错误。(Myron Marston)
rspec-mocks 2.99.0.rc1
弃用
- 弃用
RSpec::Mocks::TestDouble.extend_onto
。(Myron Marston) - 弃用
RSpec::Mocks::ConstantStubber
。(Jon Rowe) - 弃用未经选择加入的
Marshal.dump
猴子补丁。(Xavier Shay)
rspec-mocks 3.0.0.rc1
3.0.0 的重大更改
- 删除
RSpec::Mocks::TestDouble.extend_onto
。(Myron Marston) - 删除
RSpec::Mocks::ConstantStubber
。(Jon Rowe) - 使
Marshal
的猴子补丁支持对存根对象的转储成为选择加入。(Xavier Shay)
增强功能
- 在冻结对象上清理存根方法时,不再崩溃,而是发出警告说明无法清理存根。(Justin Coyne 和 Sam Phippen)
- 为
anything
、duck_type
和instance_of
参数匹配器添加有意义的描述。(Jon Rowe)
错误修复
- 修复 3.0.0.beta2 中引入的导致
double.as_null_object.to_str
返回双精度值而不是字符串的回归。(Myron Marston) - 修复
expect(dbl).to receive_message_chain(:foo, :bar)
中的错误,它没有为链中的最后一个消息设置期望。(Jonathan del Strother) - 允许验证部分双精度值具有存根的私有方法。(Xavier Shay)
- 修复了允许/期望在已对其单例类进行前置的 Class 对象上进行消息传递的错误。(Jon Rowe)
- 修复了 1.8.7 在部分双精度值上不运行实现块的问题。(Maurício Linhares)
- 防止在对在
inspect
中访问的any_instance
方法进行存根时出现StackLevelTooDeep
错误,方法是提供我们自己的 inspect 输出。(Jon Rowe) - 修复
any_instance
逻辑中的错误,该错误不允许您在配置了verify_partial_doubles
时模拟或存根私有方法。(Oren Dobzinski) - 在尝试观察任何实例上未实现的方法时包含有用的错误消息。(Xavier Shay)
- 修复
and_call_original
,使其在继承层次结构中的多个类已使用相同方法进行存根时正常工作。(Myron Marston) - 修复
any_instance
,以便它更新已存根的现有实例。(Myron Marston) - 修复已验证的双精度值,以便它们的类名包含在失败消息中。(Myron Marston)
- 修复
expect_any_instance_of
,以便当在已直接存根的单个实例上接收消息时,它仍然满足期望。(Sam Phippen, Myron Marston) - 明确禁止使用
any_instance
模拟或存根预先添加到类的模块上定义的方法。这之前会导致SystemStackError
,而且很难支持,因此我们目前不支持。(Myron Marston)
rspec-rails 2.99.0.rc1
弃用
- 弃用
stub_model
和mock_model
,改用rspec-activemodel-mocks
gem。(Thomas Holmes) - 发出弃用通知,指导用户在升级过程中配置
config.infer_spec_type_from_file_location!
,因为规范类型推断在 3.0 中是选择加入的。(Jon Rowe) - 当在使用
controller { }
宏生成匿名控制器类时,在控制器示例组中访问described_class
时发出弃用通知,因为在 2.x 中,described_class
将返回生成的类,但在 3.0 中,它将继续返回传递给describe
的类。(Myron Marston)
rspec-rails 3.0.0.rc1
3.0.0 的重大更改
- 将
mock_model
和stub_model
方法提取到rspec-activemodel-mocks
gem 中。(Thomas Holmes) - 规范类型不再按位置推断,而是需要显式标记。旧的行为通过
config.infer_spec_type_from_file_location!
启用,该行为仍在默认生成的spec_helper.rb
中提供。(Xavier Shay, Myron Marston) - 控制器规范中的
controller
宏不再修改:described_class
元数据。它仍然覆盖主题并设置控制器。(Myron Marston) - 停止依赖或要求
rspec-collection_matchers
。想要这些匹配器的用户应该将 gem 添加到他们的 Gemfile 中并自行要求。(Myron Marston) - 删除对
ActiveModel
的运行时依赖关系。(Rodrigo Rosenfeld Rosas)
增强功能
- 支持在为视图规范生成的脚手架中使用 Rails 4.x 引用属性 ID。(Giovanni Cappellotto)
- 添加
have_http_status
匹配器。(Aaron Kromer) - 将规范类型元数据添加到生成器模板。(Aaron Kromer)
错误修复
- 修复了为控制器生成的脚手架规范中的一致性问题。(Andy Waite)
- 确保
config.before(:all, :type => <type>)
钩子在给定类型的组之前运行,即使类型是通过文件位置推断的。(Jon Rowe, Myron Marston) - 切换到使用
Rack::Utils::parse_nested_query
解析参数以匹配 Rails。(Tim Watson) - 修复匿名控制器路由的命名空间不正确。(Aaron Kromer)