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-outCLI 选项,该选项将弃用警告重定向到指定的文件。(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-outCLI 选项,该选项将弃用警告重定向到指定的文件。(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-mocksgem。(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-mocksgem 中。(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)