开发
3.13.0 / 2024-02-04
增强功能
- 更新
eq
和eql
匹配器以更好地突出显示字符串编码差异。(Alan Foster,#1425)
3.12.4 / 2024-02-04
错误修复
- 修复在复合期望失败消息中重新定义的
actual
和重新赋值的@actual
的差异。(Phil Pirozhkov,#1440)
3.12.3 / 2023-04-20
错误修复
- 修复
include
匹配器,当对具有类似哈希的实际值的键进行模糊匹配时,该实际值具有非标准的key?
方法,该方法可能会引发异常。(Jon Rowe,#1416)
3.12.2 / 2023-01-07
错误修复
- 防止在使用
exist
匹配器与Dir
时出现弃用警告。(Steve Dierker,#1398)
3.12.1 / 2022-12-16
错误修复
- 将关键字参数传递给别名(以及否定)匹配器。(Jon Rowe,#1394)
- 在处理聚合失败块(或示例)中的失败时,防止失败列表泄漏。(Maciek Rząsa,#1392)
3.12.0 / 2022-10-26
增强功能
- 添加
an_array_matching
别名用于match_array
,以提高作为参数匹配器的可读性。(Mark Schneider,#1361)
3.11.1 / 2022-09-12
错误修复
- 允许
contain_exactly
匹配器通过在matches?
上重置其内部来重复使用。(@bclayman-sq,#1326) - 在
FileTest
上使用 exist 匹配器不再产生弃用警告。(Ryo Nakamura,#1383)
3.11.0 / 2022-02-09
增强功能
- 当没有异常发生时,从
aggregate_failures
返回true
。(Jon Rowe,#1225)
弃用
- 在使用隐式块期望语法时打印弃用消息。(Phil Pirozhkov,#1139)
3.10.2 / 2022-01-14
错误修复
- 修复对期望目标检查的动态匹配器的支持(Phil Pirozhkov,#1294)
- 修复
expect(array).to include(hash).times
,以前这会失败,因为匹配的是整个数组作为一个单一的哈希,而不是哈希的一个成员。(Slava Kardakov,#1322) - 确保
raise_error
匹配器与来自 Ruby 3.1 的error_highlight
选项一起工作。(Peter Goldstein,#1339)
3.10.1 / 2020-12-27
错误修复
- 允许 JRuby 9.2.x.x 以正常方式生成回溯,而不是通过我们的回填解决方法。(#1230,Jon Rowe)
3.10.0 / 2020-10-30
增强功能
- 允许
include
匹配器与once
、at_least
等一起链接,用于简单情况。(Marc-André Lafortune,#1168) - 在将
nil
传递给raise_error
时添加显式警告。(Phil Pirozhkov,#1143) - 改进
include
匹配器的可组合性。(Phil Pirozhkov,#1155) - 模拟期望现在可以设置自定义失败消息。(Benoit Tigeot 和 Nicolas Zermati,#1156)
aggregate_failures
现在显示每个失败的回溯行。(Fabricio Bedin,#1163)- 支持
yield_control
修饰符的多种组合,如at_least
、at_most
。(Jon Rowe,#1169) - 动态
have_<n>
匹配器现在具有与其他动态匹配器一致的输出。(Marc-André Lafortune,#1195) - 新的配置选项
strict_predicate_matchers
允许谓词匹配器变为严格(即匹配true
或false
),而不是默认值(匹配真值与false
或nil
)。(Marc-André Lafortune,#1196)
3.9.4 / 2020-10-29
错误修复
- 修复与
be_
和have_
匹配器以及实现to_hash
的参数的回归,它们将充当关键字并被转换为哈希。(Jon Rowe,#1222)
3.9.3 / 2020-10-23
错误修复
- 交换
be_within
匹配器的 delta 与预期值的比较,允许比较更复杂的 oobjects,前提是它们提供abs
和其他比较方法。(Kelly Stannard,#1182) - 在
be_within
匹配器的描述中正确格式化预期值。(Jon Rowe,#1185) - 删除在 2.7.x 上使用关键字参数与
be_
和have_
匹配器时的警告。(Jon Rowe,#1187) - 防止在自定义匹配的默认失败消息中将单个哈希格式化为键值对列表(修复
EnglishPhrasing#list
中的格式化)。(Robert Eshleman,#1193) - 防止错误在使用
be <operator>
比较时导致误报,例如expect(1).not_to be < 'a'
现在将正确失败而不是通过。(Jon Rowe,#1208)
3.9.2 / 2020-05-08
错误修复
- 当
yield_control
修饰符(如at_least
等)给出无效参数时,发出正确的ArgumentError
。(Marc-André Lafortune,#1167) - 防止自定义匹配器定义发出 Ruby 2.7 关键字参数警告。(Jon Rowe,#1176)
3.9.1 / 2020-03-13
错误修复
- 在使用
respond_to(...).with(n).arguments
时发出改进的警告,并在使用have_attributes(...)
时忽略该警告。(Jon Rowe,#1164)
3.9.0 / 2019-10-08
增强功能
respond_to
匹配器现在使用initialize
中的签名来验证对new
的检查(除非new
非标准)。(Jon Rowe,#1072)- 为匹配器生成的描述现在使用
is expected to
而不是should
,这与我们首选的 DSL 一致。(Pete Johns,#1080,rspec/rspec-core#2572) - 添加在使用
match_when_negated
块匹配时重新引发期望错误的能力。(Jon Rowe,#1130) - 在由于相同的 inspect 输出而产生空的 diff 时添加警告。(Benoit Tigeot,#1126)
3.8.6 / 2019-10-07
错误修复
- 由于更改与我们的语义版本控制策略不兼容,因此恢复 #1125。
3.8.5 / 2019-10-02
错误修复
- 防止使用不支持的隐式块期望语法。(Phil Pirozhkov,#1125)
3.8.4 / 2019-06-10
错误修复
- 防止在检查对象以获取运行
be_an_instance_of
和be_kind_of
匹配器所需的 方法时出现误报。(Nazar Matus,#1112)
3.8.3 / 2019-04-20
错误修复
- 防止组合的
all
匹配器泄漏到它们的兄弟节点,从而导致重复失败。(Jamie English,#1086) - 防止在比较时更改其哈希的对象失败更改检查。(Phil Pirozhkov,#1100)
- 当
be_an_instance_of
和be_kind_of
匹配器遇到不支持这些方法的对象时,发出ArgumentError
而不是NoMethodError
。(Taichi Ishitani,#1107)
3.8.2 / 2018-10-09
错误修复
- 更改
include
匹配器,使其依赖于respond_to?(:include?)
检查,而不是在调用to_hash
将其转换为哈希之前进行直接的哈希比较。(Jordan Owens,#1073) - 防止意外的调用堆栈跳转导致模糊错误(
IndexError
),并用适当的说明性消息替换该错误。(Jon Rowe,#1076)
3.8.1 / 2018-08-06
错误修复
- 修复
include
匹配器中的回归,因此停止expect(hash.with_indifferent_access).to include(:symbol_key)
工作。(Eito Katagiri,#1069)
3.8.0 / 2018-08-04
增强功能
- 通过将接收器包含为
SomeClass#some_message
来改进change(receiver, :message)
的失败消息。(Tomohiro Hashidate,#1005) - 改进
change
匹配器,以便它可以正确检测深度嵌套的可变对象(如数组-哈希-数组)中的更改。改进的逻辑使用 before/afterhash
值来查看对象是否已被变异,而不是对对象进行浅层复制。(Myron Marston,#1034) - 改进
include
匹配器,以便伪哈希对象(例如,使用SimpleDelegator
或类似方法装饰哈希的对象)被视为哈希,只要它们实现to_hash
。(Pablo Brasero,#1012) - 添加
max_formatted_output_length=
到配置中,允许更改我们截断大型输出字符串的长度。(Sam Phippen #951,Benoit Tigeot #1056) - 改进在将不支持块期望的匹配器传递给基于块的
expect
时出现的错误消息。(@nicktime,#1066)
3.7.0 / 2017-10-17
增强功能
- 改进与 Ruby 2.3+ 上的
--enable-frozen-string-literal
选项的兼容性。(Pat Allan,#997)
3.6.0 / 2017-05-04
增强功能
- 将 NoMethodError 视为比较匹配器的失败。(Jon Rowe,#972)
- 允许作用域别名和否定匹配器 - 只需在示例组中调用
alias_matcher
或define_negated_matcher
。(Markus Reiter,#974) - 改进使用块和
satisfy
匹配器的change
匹配器的失败消息,包括块代码段而不是仅将其描述为result
或block
(如果 Ripper 可用)。(Yuji Nakayama,#987)
错误修复
- 修复
yield_with_args
和yield_successive_args
匹配器,以便它们在 yield 参数时比较预期参数与实际参数,而不是在结束时比较,以防 yield 方法在 yield 后更改参数。(Alyssa Ross,#965)
3.6.0.beta2 / 2016-12-12
错误修复
- 在
File
上使用 exist 匹配器不再产生弃用警告。(Jon Rowe,#954)
3.6.0.beta1 / 2016-10-09
错误修复
- 修复
contain_exactly
以使其与范围正确工作。(Myron Marston,#940) - 修复
change
以使其与集合正确工作。(Marcin Gajewski,#939)
3.5.0 / 2016-07-01
增强功能
- 添加对
respond_to
匹配器的关键字参数的支持。(Rob Smith,#915)。
3.5.0.beta4 / 2016-06-05
错误修复
- 修复
include
匹配器,以便它为哈希提供有效的差异。(Yuji Nakayama,#916)
3.5.0.beta3 / 2016-04-02
增强功能
- 使
rspec/expectations/minitest_integration
在 Minitest::Spec 5.6+ 上工作。(Myron Marston,#904) - 添加
having_attributes
作为have_attributes
匹配器的别名。(Yuji Nakayama,#905) - 改进
change
匹配器在块被误用时的错误消息。(Alex Altair,#908)
3.5.0.beta2 / 2016-03-10
增强功能
- 添加通过
RSpec::Configuration#on_potential_false_positives = :raise
在遇到误报时引发错误的能力。(Jon Rowe,#900) - 在使用自定义匹配器 DSL 时,支持
notify_expectation_failures: true
选项用于match
方法,以允许期望失败正常引发,而不是将其转换为matches?
的false
返回值。(Jon Rowe,#892)
错误修复
- 允许
should
弃用检查在BasicObject
上工作。(James Coleman,#898)
3.5.0.beta1 / 2016-02-06
增强功能
- 使自定义匹配器 DSL 中的
match_when_negated
支持在匹配逻辑中使用期望。(Chris Arcand,#789)
错误修复
- 从传递否定期望(如
expect("foo").not_to eq "bar"
)中返回true
(如预期),以便它们在match
或match_when_negated
块中使用时能够正常工作。(Chris Arcand,#789)
3.4.0 / 2015-11-11
增强功能
- 在 MRI 1.9 中,当在子类中已经包含
RSpec::Matchers
后,又在超类中包含它时发出警告,因为这种情况会导致使用super
触发无限递归。(Myron Marston,#816) - 停止救援
NoMemoryError
、SignalExcepetion
、Interrupt
和SystemExit
。干扰这些很危险。(Myron Marston,#845) - 将
#with_captures
添加到 match 匹配器中,该匹配器允许用户在将正则表达式与字符串匹配时指定预期的捕获。(Sam Phippen,#848) - 始终以多行形式打印复合失败消息。尝试将其全部打印在一行上读起来并不好。(Myron Marston,#859)
错误修复
- 修复来自动态谓词匹配器的失败消息,当对象不响应谓词时,以便对其进行检查而不是依赖于其
to_s
- 这样对于nil
,会打印"nil"
而不是空字符串。(Myron Marston,#841) - 修复在对
#each
包含自身的可枚举对象进行 diff 时引发的 SystemStackError。(Yuji Nakayama,#857)
3.3.1 / 2015-07-15
错误修复
- 修复
be >
、be <
等,以便它失败而不是允许在与错误类型的对象进行比较时引发参数错误。这允许它在针对异构对象的复合匹配器表达式中使用。(Dennis Günnewig,#809) - 修复
respond_to
以使其在重新定义method
方法的目标对象上正常工作。(unmanbearpig,#821)
3.3.0 / 2015-06-12
增强功能
- 公开
RSpec::Matchers::EnglishPhrasing
以便于在自定义匹配器中编写漂亮的失败消息。(Jared Beck,#736) - 添加
RSpec::Matchers::FailMatchers
,这是一个混合,它提供fail
、fail_with
和fail_including
匹配器,用于在指定期望失败时使用,供扩展/插件作者使用。(Charlie Rudolph,#729) - 避免加载
tempfile
(及其依赖项),除非绝对需要。(Myron Marston,#735) - 改进在尝试使用
be_true
或be_false
时出现的失败输出。(Tim Wade,#744) - 定义
RSpec::Matchers#respond_to_missing?
,以便RSpec::Matchers#respond_to?
和RSpec::Matchers#method
处理动态谓词匹配器。(Andrei Botalov,#751) - 对所有匹配器使用自定义的 Time/DateTime/BigDecimal 格式化,以便它们在失败消息中一致地表示。(Gavin Miller,#740)
- 添加配置以关闭关于可能导致误报的匹配器组合的警告。(Jon Rowe,#768)
- 当使用裸 `raise_error` 匹配器时发出警告,因为你可能容易受到误报的影响。(Jon Rowe,#768)
- 在可能容易受到误报影响的否定预期中使用 `raise_error` 匹配器时发出警告,而不是抛出异常。(Jon Rowe,#775)
- 改进 `include(a, b, c)` 的失败消息,以便如果 `a` 和 `b` 被包含,失败消息只提及 `c`。(Chris Arcand,#780)
- 允许 `satisfy` 匹配器接受一个可选的描述参数,该参数将用于 `description`、`failure_message` 和 `failure_message_when_negated`,以代替不描述性的“sastify block”。(Chris Arcand,#783)
- 添加新的 `aggregate_failures` API,它允许多个独立的期望都失败并列在失败输出中,而不是在第一个失败时中止示例。(Myron Marston,#776)
- 改进 `raise_error` 匹配器,以便它可以接受一个匹配器作为单个参数来匹配消息。(Time Wade,#782)
错误修复
- 使 `contain_exactly` / `match_array` 与未定义 `<=>` 的严格测试替身一起使用。(Myron Marston,#758)
- 修复 `include` 匹配器,以便它在会令人困惑地突出显示实际包含但在逐行差异中不完全匹配的项目时省略差异。(Tim Wade,#763)
- 修复 `match` 匹配器,以便它在将字符串或正则表达式与另一个匹配器(而不是字符串或正则表达式)匹配时不会崩溃。(Myron Marston,#772)
- 静默仅包含空白的差异。(Myron Marston,#801)
3.2.1 / 2015-04-06
错误修复
- 阻止在生成匹配器描述时枚举 `Range`。(Jon Rowe,#755)
- 确保在 `raise_error` 匹配器中将异常消息作为字符串进行比较。(Jon Rowe,#755)
3.2.0 / 2015-02-03
增强功能
- 向自定义匹配器 API 添加 `block_arg` 方法,该方法允许你访问传递给自定义匹配器的块(如果有)。(Mike Dalton,#645)
- 在 `yield_control` 匹配器的失败消息中提供更多详细信息。(Jon Rowe,#650)
- 在匹配器 DSL 中为 `chain` 添加简写语法,该语法为其他地方使用分配值,例如 `chain :and_smaller_than, :small_value` 为 `small_value` 创建一个 `attr_reader`。(Tom Stuart,#644)
- 在使用 `should` 语法时提供更有用的弃用消息。(Elia Schito,#663)
- 在 `have_attributes` 匹配器失败消息中提供更多详细信息。(Jon Rowe,#668)
- 使 `have_attributes` 匹配器可进行差异比较。(Jon Rowe,Alexey Fedorov,#668)
- 添加 `output(...).to_std(out|err)_from_any_process` 作为 `output(...).to_std(out|err)` 的替代方案。后者在子进程写入命名流时不起作用,但速度要快得多。(Alex Genco,#700)
- 改进复合匹配器(由 `and` 和 `or` 创建),以便当一个或多个匹配器是可进行差异比较时,差异包含在失败中。(Alexey Fedorov,#713)
错误修复
- 如果对象公开响应谓词方法,则避免从目标对象上的 `be` 谓词匹配器调用 `private_methods`。这避免了在对象从 `private_methods` 抛出错误时可能发生的错误(这在 celluloid 对象中可能发生)。(@chapmajs,#670)
- 使 `yield_control`(没有修饰符)默认设置为 `at_least(:once)`,而不是在遇到多个收益时抛出令人困惑的错误。(Myron Marston,#675)
- 修复在 RSpec-expectations 上下文之外使用 RSpec-expectations 时出现的“instance variable @color not initialized”警告。(Myron Marston,#689)
- 修复 `start_with` 和 `end_with`,使其在检查字符串与字符串数组时正常工作。(Myron Marston,#690)
- 不要在为没有文档字符串的示例生成描述时使用内部委托的匹配器。(Myron Marston,#692)
3.1.2 / 2014-09-26
错误修复
- 修复 `define_negated_matcher`,以便支持流畅接口的匹配器在使用链式方法后继续被否定。(Myron Marston,#656)
- 修复 `define_negated_matcher`,以便匹配器以适当的失败消息失败。(Myron Marston,#659)
3.1.1 / 2014-09-15
错误修复
- 修复 3.1.0 中 `all` 匹配器的回归,该回归阻止它在对不是 `Enumerable` 但实现了 `each_with_index`(例如 ActiveRecord 代理)的对象上工作。(Jori Hardman,#647)
3.1.0 / 2014-09-04
增强功能
- 添加 `have_attributes` 匹配器,如果实际的属性值与预期的属性哈希匹配,则该匹配器通过:`Person = Struct.new(:name, :age)` `person = Person.new("Bob", 32)` `expect(person).to have_attributes(:name => "Bob", :age => 32)`。(Adam Farhi,#571)
- 将复合匹配器支持扩展到块匹配器,用于以下情况:`expect { ... }.to change { x }.to(3).and change { y }.to(4)`。(Myron Marston,#567)
- 在启用新的 `include_chain_clauses_in_custom_matcher_descriptions` 配置选项时,将链式方法包含在自定义匹配器描述和失败消息中。(Dan Oved,#600)
- 向 `yield_control` 匹配器添加 `thrice` 修饰符作为 `exactly(3).times` 的同义词。(Dennis Taylor,#615)
- 添加 `RSpec::Matchers.define_negated_matcher`,它定义了命名匹配器的否定版本。(Adam Farhi,Myron Marston,#618)
- 记录和支持 `contain_exactly` / `match_array` 的否定。(Jon Rowe,#626)。
错误修复
- 将私有 `LegacyMacherAdapter` 常量重命名为 `LegacyMatcherAdapter` 以修复拼写错误。(Abdelkader Boudih,#563)
- 修复 `all` 匹配器,以便它在与不可枚举对象匹配时正确失败(而不是抛出 `NoMethodError`)。(Hao Su,#622)
3.0.4 / 2014-08-14
错误修复
- 修复 `start_with` 和 `end_with`,以便它们与结构体一起正常工作。(Myron Marston,#620)
- 修复失败消息生成,以便结构体在失败中正确打印。以前,失败消息会将它们表示为数组。(Myron Marston,#620)
- 修复可组合匹配器支持,以便它不会错误地将结构体视为数组。(Myron Marston,#620)
3.0.3 / 2014-07-21
错误修复
- 修复通用运算符匹配器检测问题,以便它们在未定义时能正常工作。(Myron Marston,#597)
- 不要在 1.8.7 中无意中定义 `BasicObject`。(Chris Griego,#603)
- 修复 `include` 匹配器,以便它在与不响应 `include?` 的对象匹配时能正常失败。(Myron Marston,#607)
3.0.2 / 2014-06-19
错误修复
- 修复 `contain_exactly`(又名 `match_array`)的回归,该回归导致它在预期数组为空时错误地通过。(Myron Marston,#581)
- 当使用 `change(obj, :msg)` 形式的更改匹配器但忘记消息参数时,提供更好的错误消息。(Alex Sunderland,#585)
- 使 `contain_exactly` 匹配器能够与包含以任意顺序排列的哈希的数组一起使用。(Sam Phippen,#578)
3.0.1 / 2014-06-12
错误修复
- 添加一个缺少的 `require`,该 `require` 将导致 `respond_to` 匹配器在项目中使用时失败,而该项目中其他 RSpec(例如核心和预期)未被使用。(Myron Marston,#566)
- 结构体在进行差异比较时不再被视为数组。(Jon Rowe,#576)
3.0.0 / 2014-06-01
没有代码更改。只是将它从预发行版中删除。
3.0.0.rc1 / 2014-05-18
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)
错误修复
- 修复 beta2 在测试环境中加载 `YARD` 时触发的 `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)
3.0.0.beta2 / 2014-02-17
3.0.0 的重大变更
- 删除对使用 `Rspec` 或 `Spec` 访问 `RSpec` 常量的弃用支持。(Myron Marston)
- 删除弃用的 `RSpec::Expectations.differ=`。(Myron Marston)
- 删除对弃用的 `expect(...).should` 的支持。(Myron Marston)
- 明确禁止使用 `by`、`by_at_least`、`by_at_most` 或 `to` 的 `expect { }.not_to change { }`。这些从未被支持过,但没有引发明确的错误。(Myron Marston)
- 为所有匹配器提供 `===` 而不是 `==` 作为 `matches?` 的别名。`===` 的语义比 `==` 更接近 RSpec 匹配器。(Myron Marston)
- 删除弃用的 `RSpec::Matchers::OperatorMatcher` 常量。(Myron Marston)
- 使 `RSpec::Expectations::ExpectationNotMetError` 子类化 `Exception` 而不是 `StandardError`,以便它们可以绕过最终用户代码中的裸 `rescue`(例如,当从 RSpec-mocks 桩实现内部设置预期时)。(Myron Marston)
- 删除 Test::Unit 和 Minitest 4.x 集成。(Myron Marston)
增强功能
- 简化在与 `true`、`false` 和 `nil` 匹配时 `be` 匹配器的失败消息。(Sam Phippen)
- 更新匹配器协议和自定义匹配器 DSL 以更好地与较新的 `expect` 语法保持一致。如果希望你的匹配器与多个版本的 RSpec 保持兼容性,可以将新名称别名为旧名称。(Myron Marston)
failure_message_for_should
=>failure_message
failure_message_for_should_not
=>failure_message_when_negated
match_for_should
=>match
match_for_should_not
=>match_when_negated
- 改进从 `change` 匹配器生成的描述。(Myron Marston)
- 添加对使用 `and` 和 `or` 的复合匹配器表达式的支持。只需将它们链接到任何现有匹配器以创建类似 `expect(alphabet).to start_with("a").and end_with("z")` 的表达式。(Eloy Espinaco)
- 添加 `contain_exactly` 作为 `match_array` 的不太模棱两可的版本。请注意,它期望将预期数组作为单独的参数展开:`expect(array).to contain_exactly(1, 2)` 与 `expect(array).to match_array([1, 2])` 相同。(Myron Marston)
- 更新 `contain_exactly` / `match_array`,以便它可以与其他非数组集合(如 `Set`)匹配。(Myron Marston)
- 更新内置匹配器,以便它们可以接受匹配器作为参数,以允许你以任意方式组合匹配器。(Myron Marston)
- 添加 `RSpec::Matchers::Composable` 混合类,它可以用来使自定义匹配器也可组合。请注意,通过 `RSpec::Matchers.define` 定义的自定义匹配器已经具有此功能。(Myron Marston)
- 为内置匹配器定义名词短语别名,这些别名可以在创建读起来更好并提供更佳失败消息的可组合匹配器表达式时使用。(Myron Marston)
- 添加 `RSpec::Matchers.alias_matcher`,以便用户可以定义自己的匹配器别名。匹配器的 `description` 将反映备用匹配器名称。(Myron Marston)
- 添加显式 `be_between` 匹配器。`be_between` 作为动态谓词匹配器已经存在很长时间,但其失败消息不是最佳。新的匹配器提供更好的失败消息。(Erik Michaels-Ober)
- 增强 `be_between` 匹配器,允许 `inclusive` 或 `exclusive` 比较(例如,包含最小值/最大值或不包含最小值/最大值)。(Pedro Gimenez)
- 通过仅在使用比较运算符时才说明它令人困惑,来使 `not_to be #{operator}` 的失败消息不那么令人困惑。(Prathamesh Sonpatki)
- 当使用 `Time` 或 `DateTime` 对象时,改进 `eq` 匹配器的失败消息,以便包含完整的亚秒精度。(Thomas Holmes, Jeff Wallace)
- 添加 `output` 匹配器,用于期望代码块输出到 `to_stdout` 或 `to_stderr`。(Luca Pette, Matthias Günther)
- 当使用 `have_xyz` 匹配器时,将提供的代码块转发到 `has_xyz?` 方法调用。(Damian Galarza)
- 提供与 Minitest 5.x 的集成。加载 minitest 后,需要 `rspec/expectations/minitest_integration` 才能将 rspec-expectations 与 minitest 一起使用。(Myron Marston)
错误修复
- 修复使用假值预期值时的错误匹配器描述(yujinakayama)
- 修复 `expect { }.not_to change { }.from(x)`,以便匹配器仅在起始值为 `x` 时才通过。(Tyler Rick, Myron Marston)
- 修复哈希差异,使其能够正确地着色,并且在执行差异时不考虑尾随逗号。(Jared Norman)
- 修复内置匹配器,使其在遇到错误类型的对象时正常失败,而不是引发 `ArgumentError`,以便它们可以在复合匹配器表达式(如 `expect([1.51, "foo"]).to include(a_string_matching(/foo/), a_value_within(0.1).of(1.5))` 中良好工作。(Myron Marston)
弃用
- 保留对 RSpec 2 匹配器协议的支持(例如,对于第三方扩展 gem 中的匹配器,如 `shoulda`),但它将打印弃用警告。(Myron Marston)
3.0.0.beta1 / 2013-11-07
3.0.0 的重大变更
- 删除对 1.8.6 的显式支持。(Jon Rowe)
- 删除已弃用的 `be_close` 匹配器,建议改用 `be_within`。(Sam Phippen)
- 删除已弃用的 `have`、`have_at_least` 和 `have_at_most` 匹配器。您可以继续通过 https://github.com/rspec/rspec-collection_matchers 使用这些匹配器,或者您可以使用类似 `expect(your_object.size).to eq(num)` 的内容重写您的期望。(Hugo Baraúna)
- 将 `be_true` 和 `be_false` 重命名为 `be_truthy` 和 `be_falsey`。(Sam Phippen)
- 使 `expect { }.to_not raise_error(SomeSpecificClass, message)`、`expect { }.to_not raise_error(SomeSpecificClass)` 和 `expect { }.to_not raise_error(message)` 无效,因为它们容易隐藏失败。相反,请使用 `expect { }.to_not raise_error`(不带参数)。(Sam Phippen)
- 在 `RSpec::Matchers.define` 块中,通过 `def self.helper` 或 `extend HelperModule` 提供的辅助方法不再可用于 `match` 块(或任何其他块)。相反,`include` 您的辅助模块并将辅助方法定义为实例方法。(Myron Marston)
- 强制升级 Diff::LCS 以实现与差异的编码兼容性。(Jon Rowe)
增强功能
- 支持使用 `raise_error` 匹配器的 `do..end` 样式代码块。(Yuji Nakayama)
- 重写自定义匹配器 DSL,以简化其实现并解决一些问题。(Myron Marston)
- 允许在自定义匹配器 DSL 块中提前 `return`。(Myron Marston)
- 自定义匹配器 DSL 的 `chain` 现在可以接受代码块。(Myron Marston)
- 支持通过链式 `with_message` 方法调用在 `raise_error` 匹配器上设置期望。(Sam Phippen)
错误修复
- 允许在 DSL 定义的自定义匹配器的 `match` 块中使用 `include` 和 `match` 匹配器。(Myron Marston)
- 纠正差异失败时的编码错误消息(Jon Rowe)
弃用
- 在没有明确配置的情况下使用旧的 `:should` 语法已被弃用。它将继续工作,但如果您没有明确启用它,将在 RSpec 3 中发出弃用警告。(Sam Phippen)
2.99.2 / 2014-07-21
错误修复
- 修复 `Expectations#method_handle_for` 中的回归,其中代理对象的方法委托错误地不会返回方法句柄。(Jon Rowe, #594)
- 修复通用运算符匹配器检测问题,以便它们在未定义时能正常工作。(Myron Marston,#597)
2.99.1 / 2014-06-19
错误修复
- 修复自定义匹配器 `expected` 弃用警告中的拼写错误 - 它是 `expected_as_array`,而不是 `expected_array`。(Frederick Cheung, #562)
2.99.0 / 2014-06-01
增强功能
- 为 `rspec-rails` 中的 `errors_on` 特殊情况的弃用消息,使其更有用。(Aaron Kromer)
2.99.0.rc1 / 2014-05-18
弃用
- 弃用 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)
2.99.0.beta2 / 2014-02-17
弃用
- 弃用从 `expect { }.not_to change { }` 中链接 `by`、`by_at_least`、`by_at_most` 或 `to`。文档始终指出这些方法不支持否定形式,但现在它们在 RSpec 3 中明确引发错误。(Myron Marston)
- 更改 `expect { }.not_to change { x }.from(y)` 的语义。在 RSpec 2.x 中,此期望仅在 `x` 从 `y` 的值开始并发生更改时才会失败。如果它从不同的值开始并发生更改,它将通过。在 RSpec 3 中,它将仅在值从 `y` 开始并且没有发生更改时才通过。(Myron Marston)
- 弃用 `matcher == value` 作为 `matcher.matches?(value)` 的别名,建议使用 `matcher === value`。(Myron Marston)
- 弃用 `RSpec::Matchers::OperatorMatcher`,建议使用 `RSpec::Matchers::BuiltIn::OperatorMatcher`。(Myron Marston)
- 弃用与 Test::Unit 和 minitest 的自动集成。相反,在适当的测试用例基类中自己包含 `RSpec::Matchers`。(Myron Marston)
- 弃用将 DSL 生成的自定义匹配器上的 `#expected` 视为数组,当仅将 1 个参数传递给匹配器方法时。在 RSpec 3 中,它将是单个值,以便使差异能够正常工作。(Jon Rowe)
2.99.0.beta1 / 2013-11-07
弃用
- 弃用 `have`、`have_at_least` 和 `have_at_most`。您可以继续通过 https://github.com/rspec/rspec-collection_matchers 使用这些匹配器,或者您可以使用类似 `expect(your_object.size).to eq(num)` 的内容重写您的期望。(Hugo Baraúna)
- 弃用 `be_xyz` 谓词匹配器,当 `xyz?` 是私有方法时。(Jon Rowe)
- 弃用 `be_true`/`be_false`,建议使用 `be_truthy`/`be_falsey`(用于 Ruby 的条件语义)或 `be true`/`be false`(用于精确相等)。(Sam Phippen)
- 弃用使用错误范围从自定义匹配器中调用辅助方法。(Myron Marston)
- `def self.foo` / `extend Helper` 可用于添加宏方法(例如,调用自定义匹配器 DSL 方法的方法),但不应用于定义从 DSL 块内部调用的辅助方法。
- `def foo` / `include Helper` 的作用相反:它用于定义从 DSL 块内部可调用的辅助方法,但不用于定义宏。
- RSpec 2.x 允许以任何一种方式定义的辅助方法用于任何目的,但 RSpec 3.0 不会。
2.14.5 / 2014-02-01
错误修复
- 修复使用假值预期值时的错误匹配器描述(yujinakayama)
2.14.4 / 2013-11-06
错误修复
- 使 `match` 匹配器产生差异输出。(Jon Rowe, Ben Moss)
- 更智能地为差异选择编码,如果其他方法都失败,则使用默认内部编码并替换字符。(Jon Rowe)
2.14.3 / 2013-09-22
错误修复
- 修复目标上重新定义 `method` 时的运算符匹配器(`should` 语法)。(Brandon Turner)
- 修复使用基于对象的键的哈希差异。(Jon Rowe)
- 修复通过 `method_missing` 定义运算符时的运算符匹配器(`should` 语法)(Jon Rowe)
2.14.2 / 2013-08-14
错误修复
- 修复 `be_
` 匹配器,使其不支持像 `be` 匹配器那样的运算符链接(例如,`be == 5`)。由于 `be_ == anything` 返回 `BeComparedTo` 匹配器,因此始终为真,这会导致一些奇怪的行为。这是实现(例如,子类化基本 `Be` 匹配器)的结果,并非预期行为。(Myron Marston)。 - 修复 `change` 匹配器,使其除了使用 `===` 之外还使用 `==` 进行比较。对于表达式 `expect {}.to change { a.class }.from(ClassA).to(ClassB)` 来说,这一点很重要,因为 `SomeClass === SomeClass` 返回 false。(Myron Marston)
2.14.1 / 2013-08-08
错误修复
- 确保差异输出使用与被差异字符串的编码相同的编码,以防止 `Encoding::UndefinedConversionError` 错误(Jon Rowe)。
2.14.0 / 2013-07-06
错误修复
- 对于文档输出,非匹配器值使用 `#inspect` 而不是 `#description`(Andy Lindeman, Sam Phippen)。
- 使 `expect(a).to be_within(x).percent_of(y)` 在 y 为负数时也能正常工作(Katsuhiko Nishimra)。
- 使 `be_predicate` 匹配器在与 `expect{...}.to change...` 一起使用时按预期工作(Sam Phippen)。
2.14.0.rc1 / 2013-05-27
增强功能
- 增强 `yield_control`,以便您可以指定确切或相对的次数:`expect { }.to yield_control.exactly(3).times`、`expect { }.to yield_control.at_least(2).times` 等(Bartek Borkowski)。
- 使在期望失败时使用的差异处理程序能够更好地处理数组,方法是将数组的每个元素拆分到自己的行上。(Sam Phippen)
- 接受响应 `:to_str` 的鸭子类型字符串作为期望消息。(Toby Ovod-Everett)
错误修复
- 修复差异处理程序,使其在处理不同编码的字符串时不引发错误(Jon Rowe)。
- 修复 `expect(something).to be_within(x).percent_of(y)`,其中 x 和 y 都是整数(Sam Phippen)。
- 修复 `have` 匹配器,使其能够处理在 ruby 2.0 上 `Enumerator#size` 可能返回 nil 的事实(Kenta Murata)。
- 修复 `expect { raise s }.to raise_error(s)`,其中 s 是 ruby 2.0 上的错误实例(Sam Phippen)。
- 修复 `expect(object).to raise_error` 通过。现在它会警告用户并使规范失败(tomykaira)。
弃用
- 弃用 `expect { }.not_to raise_error(SpecificErrorClass)` 或 `expect { }.not_to raise_error("some specific message")`。使用这些方法容易隐藏失败,因为它们会允许任何其他错误通过。(Sam Phippen 和 David Chelimsky)
2.13.0 / 2013-02-23
增强功能
- 添加对 `be_within` 匹配器的百分比增量的支持:`expect(value).to be_within(10).percent_of(expected)`(Myron Marston)。
- 添加对 `include` 匹配器的支持,允许它被赋予一个匹配器列表作为要匹配的预期值(Luke Redpath)。
错误修复
- 修复 `change` 匹配器,使其能够复制字符串以处理被修改的字符串(Myron Marston)。
- 修复 `should be =~ /some regex/` / `expect(...).to be =~ /some regex/`。以前,这些方法要么使用令人困惑的 `undefined method matches?' for false:FalseClass` 错误失败,要么是没有任何实际验证的空操作(Myron Marston)。
- 添加对 diff-lcs 1.2 的兼容性,并放宽版本限制(Peter Goldstein)。
- 修复 DSL 生成的匹配器,允许在同一个示例中使用相同匹配器的多个实例,根据预期值拥有不同的描述和失败消息(Myron Marston)。
- 防止在转储多行字符串数组的差异时出现 `undefined method #split for Array` 错误(Myron Marston)。
- 在比较不在 ASCII 兼容编码中的字符串时,不要崩溃(Myron Marston)。
- 删除对空差异打印的令人困惑的“检查 #== 的实现”消息(Myron Marston)。
2.12.1 / 2012-12-15
错误修复
- 改进类似 `{}。should =~ {}` 的表达式的失败消息。(Myron Marston 和 Andy Lindeman)
- 提供 `match_regex` 别名,以便使用匹配器 DSL 构建的自定义匹配器可以使用它(因为 `match` 在该上下文中是不同的方法)。(Steven Harman)
2.12.0 / 2012-11-12
增强功能
- 如果配置了
--color
选项,则对差异进行着色。(Alex Coplan) - 在由
raise_error
匹配器处理的意外错误中包含回溯信息。(Myron Marston) - 当用户意外地将非字符串参数作为预期消息传递时,打印警告。(Sam Phippen)
- 当实际值不是数组(或响应
#to_ary
的对象)时,=~
和match_array
匹配器输出更实用的错误消息。(Sam Phippen)
错误修复
- 修复
include
匹配器,使expect({}).to include(:a => nil)
失败,因为它应该失败。(Sam Phippen) - 修复
be_an_instance_of
匹配器,以便在描述中使用Class#to_s
而不是Class#inspect
,因为一些类(如ActiveRecord::Base
)定义了冗长且详细的#inspect
。(Tom Stuart)
2.11.3 / 2012-09-04
错误修复
- 修复(并弃用)
expect { }.should
语法,使其即使从未被记录或意图的语法也能正常工作。它之所以能工作,是因为在 RSpec 2.10 及更早版本中expect
的实现方式。(Myron Marston) 确保在内置匹配器上定义 #==,以便它们可以组合。例如
expect { user.emailed! }.to change { user.last_emailed_at }.to be_within(1.second).of(Time.zone.now)
2.11.2 / 2012-07-25
错误修复
- 在 MacRuby 上将
should
和should_not
定义在Object
上,而不是BasicObject
上。在 MacRuby 上,BasicObject
被定义,但它不是对象层次结构的根节点。(Gabriel Gilder)
2.11.1 / 2012-07-08
错误修复
- 将
be_within
匹配器中的actual
限制为响应-
的值,而不是要求特定类型。- 例如,
Time
是一个合法的替代方法。
- 例如,
2.11.0 / 2012-07-07
增强功能
- 扩展
expect
语法,使其除了支持块之外,还支持对裸值的期望(Myron Marston)。 - 添加配置选项来控制可用的期望语法(Myron Marston)
RSpec.configuration.expect_with(:rspec) { |c| c.syntax = :expect }
RSpec.configuration.expect_with(:rspec) { |c| c.syntax = :should }
RSpec.configuration.expect_with(:rspec) { |c| c.syntax = [:should, :expect] }
RSpec.configuration.add_should_and_should_not_to Delegator
错误修复
- 只允许
Numeric
值作为be_within
匹配器中的“实际”值。这可以防止出现令人困惑的错误消息。(Su Zhang @zhangsu) - 在
BasicObject
上定义should
和should_not
,而不是在 1.9 上定义Kernel
。这使得should
和should_not
能够与像Delegator
这样的BasicObject
子类代理对象正常工作。(Myron Marston)
2.10.0 / 2012-05-03
增强功能
- 添加新的
start_with
和end_with
匹配器(Jeremy Wadsack) - 添加新的匹配器,用于指定 yield(Myron Marston)
expect {...}.to yield_control
expect {...}.to yield_with_args(1, 2, 3)
expect {...}.to yield_with_no_args
expect {...}.to yield_successive_args(1, 2, 3)
match_unless_raises
接受多个异常参数
错误修复
- 修复
be_within
匹配器,使其包含 delta。 - 修复特定于消息的规范,使其在 Rubinius 上通过(John Firebaugh)
2.9.1 / 2012-04-03
错误修复
- 如果两个对象之间的差异为空,则提供一个有帮助的消息。
- 修复用多行字符串对单个字符串进行差异的错误。
- 修复在其他自定义匹配器中使用自定义匹配器的错误(mirasrael)
- 修复在嵌套 DSL 匹配器中使用执行上下文方法的错误(mirasrael)
2.9.0 / 2012-03-17
增强功能
- 将内置匹配器类移到 RSpec::Matchers::BuiltIn 中,以减少对 RSpec::Matchers 的污染(RSpec::Matchers 包含在每个示例中)。
- 自动加载包含匹配器类的文件,以提高加载速度。
错误修复
- 在 DSL 定义的匹配器中对齐
respond_to?
和method_missing
。 - 在调用 DSL 定义的匹配器之间清除用户定义的实例变量。
- 复制 DSL 生成的匹配器的实例,以便其状态不会因后续调用而改变。
- 在正向期望和负向期望之间一致地对待预期的参数(感谢 Ralf Kistner 的提醒)
2.8.0 / 2012-01-04
增强功能
- 对 Hash 的更好的差异输出(Philippe Creux)
- 消除 Ruby 警告(Olek Janiszewski)
2.8.0.rc2 / 2011-12-19
此版本没有更改。只是与其他 rspec gem 一起发布。
2.8.0.rc1 / 2011-11-06
增强功能
- 对内置匹配器使用类(它们更快)。
- 消除 Ruby 警告(Matijs van Zuijlen)
2.7.0 / 2011-10-16
增强功能
HaveMatcher
使用to_i
转换参数(Alex Bepple & Pat Maddox)- 改进
have_xxx
匹配器的失败消息(Myron Marston) HaveMatcher
支持count
(Matthew Bellantoni)- 在操作之前更改匹配器 dup
Enumerable
,支持 Rails 中的自定义Enumerable
类型,如CollectionProxy
(David Chelimsky)
错误修复
- 修复
have(n).xyz
文档中的拼写错误(Jean Boussier) - 修复 ruby 1.9.2 的
safe_sort
(Kernel
现在为 Object 定义了<=>
)(Peter van Hardenberg)
2.6.0 / 2011-05-12
增强功能
change
匹配器接受正则表达式(Robert Davis)- 对
have_xxx
匹配器提供更好的描述(Magnus Bergmark) range.should cover(*values)
(Anders Furseth)
错误修复
- 删除了导致 rcov 出现问题的非 ASCII 字符(Geoffrey Byers)
- 更改匹配器 dup 数组和哈希,以便能够正确地比较它们的前后状态。
- 修复 RSpec::Matchers 在 Test::Unit::TestCase 和 MiniTest::Unit::TestCase 中的包含顺序,以防止出现 SystemStackError(Myron Marston)
2.5.0 / 2011-02-05
增强功能
should exist
与exist?
或exists?
一起使用(Myron Marston)expect { ... }.not_to do_something
(除了to_not
之外)
文档
- 改进了 raise_error 匹配器的文档(James Almond)
2.4.0 / 2011-01-02
此版本没有功能上的更改,更改是为了与 rspec-core-2.4.0 版本保持一致。
增强功能
- 改进了 change 匹配器的 RDoc(Jo Liss)
2.3.0 / 2010-12-12
增强功能
- 在 include 匹配器失败时对字符串进行差异(Mike Sassak)
2.2.0 / 2010-11-28
2.1.0 / 2010-11-07
增强功能
be_within(delta).of(expected)
匹配器(Myron Marston)- 许多新的 Cucumber 功能(Myron Marston)
- 如果在 Ruby-1.9 上尝试
should != expected
,则引发错误(Myron Marston) - 改进了
throw_symbol
的失败消息(Myron Marston)
错误修复
- 消除对
RSpec::Core
的硬性依赖(Myron Marston) have_matcher
- 仅当确实定义了 ActiveSupport inflections 时才使用复数形式(Josep M Bach)throw_symbol
匹配器不再吞没异常(Myron Marston)- 修复匹配器链接,以避免名称冲突(Myron Marston)
2.0.0 / 2010-10-10
增强功能
- 向匹配器 DSL 添加
match_for_should_not
方法(Myron Marston)
错误修复
respond_to
匹配器与should_not
一起使用多个方法时,能够正常工作(Myron Marston)include
匹配器与should_not
一起使用多个值时,能够正常工作(Myron Marston)
2.0.0.rc / 2010-10-05
增强功能
- 在 T::U 或 MiniUnit 套件中
require 'rspec/expectations'
(Josep M. Bach)
错误修复
- 更改为 0 正确地通过/失败(Len Smith)
- 向满足匹配器添加描述
2.0.0.beta.22 / 2010-09-12
增强功能
- 差异改进
- 差异化多行字符串
- 不要对单行字符串进行差异化
- 不要对数字进行差异化(愚蠢的)
- 差异化正则表达式 + 多行字符串
Bug 修复 * should[_not]
change 现在能够正确地处理布尔值