开发

完整变更日志

3.13.1 / 2024-05-08

完整变更日志

Bug 修复

  • RSpec::Mocks::Proxy 中使用 RSpec::Support::Mutex 来避免对 ::Mutex#new 进行 stubbing 导致的问题。 (Eric Mueller, #1575)

3.13.0 / 2024-02-04

完整变更日志

增强

  • 为参数添加 array_excluding 匹配器。 (Zane Wolfgang Pickett, #1528)

3.12.7 / 2024-02-04

完整变更日志

Bug 修复

  • 减少 "any_instance" 风格的 mock 中的内存分配。 (Carlos Palhares, #1479)

3.12.6 / 2023-07-11

完整变更日志

Bug 修复

  • 修复使用 and_call_original 时与 method_missing 回退方法配合使用关键字参数时的错误。 (Igor Drozdov, #1552)

3.12.5 / 2023-03-30

完整变更日志

Bug 修复

  • 修复 Rails 的兼容性问题,其中 active_support 在使用任何实例时会对 with 进行猴子补丁。 (Lachlan Sylvester, #1540)

3.12.4 / 2023-03-12

完整变更日志

Bug 修复

  • 修复断言 Array#reverse 从未被调用的问题。 (Brad Trick, #1533)
  • 修复 Rails 的兼容性问题,其中 active_support 对 with 进行猴子补丁。 (Jean Boussier, #1531, #1534)

3.12.3 / 2023-01-17

完整变更日志

Bug 修复

  • 在 Ruby 3 上修复 send 中的关键字委托,用于验证 double。 (Charlie Honig, #1485)

3.12.2 / 2023-01-07

完整变更日志

Bug 修复

  • 在 Ruby 3.2.0 上修复使用关键字参数的 mock 的实现块。 (Adam Steel, #1508)
  • 在 Ruby 3.2.0 上修复使用 with 进行 mock 时关键字参数断言。 (Slava Kardakov, Benoit Tigeot, Phil Pirozhkov, Benoit Daloze, #1514)

3.12.1 / 2022-12-10

完整变更日志

Bug 修复

  • 当 diff 仅包含控制台代码时删除空的 diff 标记。 (Jon Rowe, #1506)
  • 当参数不为 == 时显示关键字与哈希的 diff 标记。 (Jon Rowe, #1506)
  • 更改检查以检测冻结对象,改为捕获错误而不是通过检查 frozen? 来抢先阻止,因为某些对象的行为异常。 (Keegan Roth, #1401)
  • 防止在跨类继承边界使用 expect_any_instance_of 时出现未满足的期望,导致抛出异常而不是失败。 (Jon Rowe, #1496)
  • 防止在将 allow(...).not_to 与不支持的匹配器一起使用时出现误导性的错误消息。 (Phil Pirozhkov, #1503)

3.12.0 / 2022-10-26

完整变更日志

增强

  • 改进将关键字参数与哈希进行 diff 时的 diff 输出。 (Jean Boussier, #1461)

3.11.2 / 2022-10-25

完整变更日志

Bug 修复

  • 使用 Class.new 的原始实现来检测 new 的覆盖定义,而不是使用所有者,从而修复了在 Ruby 3 及更高版本中检测 "double aliased" 方法的问题。 (Benoit Daloze, #1470, #1476)
  • 在使用 instance_double 的 Ruby 3.0+ 上,使用 with 限制参数期望时支持关键字参数语义。 (Andrii Malyshko, #1473)

3.11.1 / 2022-03-31

完整变更日志

Bug 修复

  • 添加额外的 ruby2_keywords 调用,以便正确地指定使用 *args 传递关键字的方法,修复了 TruffleRuby 的一个问题。 (Benoit Daloze, #1464)

3.11.0 / 2022-02-09

完整变更日志

增强

  • receive(以及 receive_messages)的配置响应添加 and_invoke 实现,支持使用多个可调用对象。 (Kyle Smith, #1411)

3.10.3 / 2022-01-28

完整变更日志

Bug 修复

  • 通过将 $VERBOSE 设置为 nil 来抑制警告。 (Nobuyoshi Nakada, #1414)
  • 在 Ruby 3.0+ 上使用 with 限制参数期望时支持关键字参数语义。 (Yusuke Endoh, #1394)

3.10.2 / 2021-01-27

完整变更日志

Bug 修复

  • 在 Ruby 3.0 上支持 and_call_original 时的关键字参数。 (Bryan Powell, #1385)
  • RSpec::Mocks::Constant#previously_defined? 现在始终为布尔值。 (Phil Pirozhkov, #1397)
  • 在 Ruby 3.0 上支持使用 expect_any_instance_ofallow_any_instance_ofand_call_original 时的关键字参数。 (Jess Hottenstein, #1407)

3.10.1 / 2020-12-27

完整变更日志

Bug 修复

  • 在对不支持的对象上的不支持方法进行 stubbing 时,发出 ArgumentError 而不是 TypeError。 (@zhisme, #1357)

3.10.0 / 2020-10-30

完整变更日志

增强

  • 添加在 MessageExpectation 中设置自定义错误生成器功能。 这将允许 rspec-expectations 插入自定义失败消息。 (Benoit Tigeot 和 Nicolas Zermati, #1312)
  • 当块运行时返回传递给 RSpec::Mocks.with_temporary_scope 的块的结果。 (@expeehaa, #1329)

3.9.1 / 2019-12-31

完整变更日志

Bug 修复

  • 在使用 allow_any_instance_ofexpect_any_instance_of 时触发 RSpec::Mocks.configuration.verifying_double_callbacks。 (Daniel Orner, #1309)

3.9.0 / 2019-10-07

完整变更日志

增强

  • 通过使用 Mutex 来防止死锁错误,提高消息期望的线程安全性。 (Ry Biesemeyer, #1236)
  • 添加使用 time 作为 times 的别名的功能。 例如:expect(Class).to receive(:method).exactly(1).time。 (Pistos, Benoit Tigeot, #1271)

3.8.2 / 2019-10-02

完整变更日志

  • 允许 array_including 参数匹配器进行嵌套。 (Emmanuel Delmas, #1291)

3.8.1 / 2019-06-13

完整变更日志

Bug 修复

  • 确保 stubbing 方法不会改变其可见性。 (Kevin Boschert, #1277)

3.8.0 / 2018-08-04

完整变更日志

Bug 修复

  • 在遇到无效的 "counted" 负消息期望时发出错误。 (Sergiy Yarinovskiy, #1212)
  • 确保 allow_any_instance_ofexpect_any_instance_of 可以暂时被抑制。 (Jon Rowe, #1228)
  • 确保 expect_any_instance_of(double).to_not have_received(:some_method) 能够优雅地失败(因为它不受支持),而不是发出 NoMethodError。 (Maxim Krizhanovsky, #1231)

3.7.0 / 2017-10-17

完整变更日志

增强

  • 改进与 Ruby 2.3+ 上的 --enable-frozen-string-literal 选项的兼容性。 (Pat Allan, #1165)

Bug 修复

  • 修复 hash_includinghash_excluding,使其能够与 Hash 的子类一起使用。 (Aaron Rosenberg, #1167)

3.6.0 / 2017-05-04

完整变更日志

Bug 修复

  • 修复在没有 rspec-core 的情况下使用 rspec-mocks 时出现的 "instance variable @color not initialized" 警告。 (Myron Marston, #1142)
  • 在 1.8.7 上对 stubbing 进行恢复别名模块方法。 (Samuel Giddins, #1144)
  • 允许消息链期望通过参数进行约束。 (Jon Rowe, #1156)

3.6.0.beta2 / 2016-12-12

完整变更日志

增强

  • 添加新的 without_partial_double_verification { } API,允许你为示例临时关闭部分 double 验证。 (Jon Rowe, #1104)

3.6.0.beta1 / 2016-10-09

完整变更日志

Bug 修复

  • #freeze 返回测试 double 实例。 (Alessandro Berardi, #1109)
  • 允许对 new 进行 stubbing 的特殊逻辑在 <Class>.method 被重新定义时也能正常工作。 (Proby, #1119)

3.5.0 / 2016-07-01

完整变更日志

增强

  • 提供 RSpec::Mocks::MessageExpectation 的友好的字符串表示形式。 (Myron Marston, #1095)

3.5.0.beta4 / 2016-06-05

完整变更日志

增强

  • and_throw 添加到任何实例处理。 (Tobias Bühlmann, #1068)

3.5.0.beta3 / 2016-04-02

完整变更日志

增强

  • 在尝试使用不支持的 allow(...).to receive(...).ordered 时发出警告。 (Jon Rowe, #1000)
  • 添加 rspec/mocks/minitest_integration,以便正确地将 rspec-mocks 与 minitest 集成。 (Myron Marston, #1065)

3.5.0.beta2 / 2016-03-10

完整变更日志

增强

  • 改进在纯测试 double 上使用 and_wrap_original 时显示的错误消息。 (betesh, #1063)

Bug 修复

  • 修复了阻止 receive_message_chain(...).with(...) 在 "any instance" mock 上正确工作的问题。 (Jon Rowe, #1061)

3.5.0.beta1 / 2016-02-06

完整变更日志

Bug 修复

  • 允许 any_instance_of(...).to receive(...) 多次使用 and_yield。 (Kilian Cirera Sant, #1054)
  • 允许继承自 rspec-mocks 匹配器的匹配器用于 allow。 (Andrew Kozin, #1056)
  • 防止对部分 double 进行 stubbing respond_to? 导致无限递归。 (Jon Rowe, #1013)
  • 防止别名方法在使用 any_instance 进行 mock 后消失(#1043 的回归)。 (Joe Rafaniello, #1060)

3.4.1 / 2016-01-10

完整变更日志

Bug 修复

  • 修复 any_instance 使其在 Ruby 2.3 上正常工作。 (Joe Rafaniello, #1043)

3.4.0 / 2015-11-11

完整变更日志

增强

  • 使 expect(...).to have_received 能够在不依赖 rspec-expectations 的情况下工作。 (Myron Marston, #978)
  • 添加选项,用于在对 nil 设置期望时使测试失败。 (Liz Rush, #983)

Bug 修复

  • 修复 have_received { ... },以便在消息被接收时传递的任何块都被转发到 have_received 块。 (Myron Marston, #1006)
  • 修复在 stubbing respond_to? 时错误生成器中的无限循环。 (Alex Dowad, #1022)
  • 修复在 1.8.7 上对子类(在类级别)使用 receive 时的错误。 (Alex Dowad, #1026)

3.3.2 / 2015-07-15

完整变更日志

Bug 修复

  • 防止代理创建期间出现线程死锁错误(例如,在使用 before_verifying_doubles 回调时)。 (Jon Rowe, #980, #979)

3.3.1 / 2015-06-19

完整变更日志

Bug 修复

  • 修复 before_verifying_double 回调逻辑中的错误,该错误导致在对类进行 mock 或 stubbing 时,它会为祖先列表中的每个类调用一次。 现在,它只对被 mock 或 stubbing 的类调用一次,如你所期望的那样。 (Sam Phippen, #974)

3.3.0 / 2015-06-12

完整变更日志

增强

  • 在对 MyClassclass_double(MyClass) 进行 stubbing new 时,使用 MyClass#initialize 中的方法签名来验证参数。 (Myron Marston, #886)
  • 在为 mock 期望失败生成接收到的参数描述时使用匹配器描述。 (Tim Wade, #891)
  • 避免不必要地加载 stringio。 (Myron Marston, #894)
  • 验证 double 失败消息现在可以区分类级别和实例级别方法。 (Tim Wade, #896, #908)
  • 改进 mock 期望失败消息,使其在输出中同时包含次数和接收到的参数。 (John Ceh, #918)
  • 改进测试 double 在失败消息中的表示方式。 (Siva Gollapalli, Myron Marston, #932)
  • RSpec::Mocks::Configuration#when_declaring_verifying_double 重命名为 RSpec::Mocks::Configuration#before_verifying_doubles,并在验证部分 double 时使用它。 (Jon Rowe, #940)
  • 使用 rspec-support 的 ObjectFormatter 来改进失败消息中参数的格式,例如,显示时间对象的完整时间精度。 (Gavin Miller, Myron Marston, #955)

Bug 修复

  • 确保急切地抛出异常的期望在 RSpec 验证期间也会抛出异常。 这意味着,如果在测试执行中捕获了异常,测试仍然会失败。 (Sam Phippen, #884)
  • 修复 have_received(msg).with(args).exactly(n).timesreceive(msg).with(args).exactly(n).times 失败消息,用于当消息以指定的参数接收了错误的次数,并且也以其他参数接收了额外的次数。 以前,它会令人困惑地将参数列为不匹配(即使 double 被允许接收任何参数),而不是列出计数。 (John Ceh, #918)
  • 修复 any_args/anything 支持,以便我们避免对可能错误地实现了 == 的用户对象调用 obj == anything,这种实现会导致抛出错误。 (Myron Marston, #924)
  • 修复涉及对类和子类进行 stubbing 同一方法的边缘情况,该情况以前会导致 RSpec 内部出现 NoMethodError。 (Myron Marston #954)
  • 修复边缘情况,其中接收到的消息计数会因一次失败而多次递增。 (Myron Marston, #957)
  • 修复当间谍以不同的参数接收了预期消息,并且还接收了另一条消息时的失败消息。 (Maurício Linhares, #960)
  • 使空白 diff 静音。 (Myron Marston, #969)

3.2.1 / 2015-02-23

完整变更日志

Bug 修复

  • 添加丢失的 rspec/support/differ require,以便可以在没有 rspec-expectations 的情况下使用 rspec-mocks(它也会加载 differ,并隐藏了我们忘记 require 它的事实)。 (Myron Marston, #893)
  • 还原接收到的参数突变的跟踪(在 3.2.0 中添加以在无法支持的情况下提供错误),因为我们的实现对非标准对象有副作用,而且我们找不到始终有效的解决方案。 (Myron Marston, #900)

3.2.0 / 2015-02-03

完整变更日志

增强

  • any_args 视为参数 splat,允许它在参数列表中的任何位置匹配任意数量的参数。 (Myron Marston, #786)
  • 在 mock 期望的参数不匹配时打印 diff。 (Sam Phippen, #751)
  • 支持验证 double 的名称(instance_doubleinstance_spyclass_doubleclass_spyobject_doubleobject_spy)。 (Cezary Baginski, #826)
  • 使 array_includinghash_including 参数匹配器可以组合使用。 (Sam Phippen, #819)
  • 使 allow_any_instance_of(...).to receive(...).and_wrap_original 能够正常工作。 (Ryan Fitzgerald, #869)

Bug 修复

  • 当用户错误地将 no_args 与其他参数组合在一起时提供一个清晰的错误(例如 expect().to receive().with(no_args, 1))。 (Myron Marston, #786)
  • 当用户错误地在一个参数列表中多次使用 any_args 时提供一个清晰的错误(例如 expect().to receive().with(any_args, 1, any_args))。 (Myron Marston, #786)
  • 防止错误生成器使用用户对象的 #description 方法。 请参见 #685。 (Sam Phippen, #751)
  • 当 `SomeConst` 之前被 stubbed 时,确保声明为 `(instance|class)_double(SomeConst)` 的已验证 double 正常工作。`(instance|class)_double("SomeClass")` 已经正常工作。(Myron Marston,#824)
  • 为 `receive`、`receive_messages` 和 `receive_message_chain` 添加匹配器描述。(Myron Marston,#828)
  • 验证空对象已验证 double 的调用参数。(Myron Marston,#829)
  • 当使用无效常量调用 `RSpec::Mocks::Constant.original` 时,修复它返回表示常量名称无效的对象,而不是崩溃。(Myron Marston,#833)
  • 使任何对象上的 `extend RSpec::Mocks::ExampleMethods` 正常工作,以将 rspec-mocks API 添加到该对象。以前,`expect` 是未定义的。(Myron Marston,#846)
  • 修复 `require 'rspec/mocks/standalone'`,使其只影响 `main`,而不是每个对象。它实际上只打算在像 IRB 这样的 REPL 中使用,但一些 gem 加载了它,认为在 rspec-core 上下文之外使用 rspec-mocks 时需要加载它。(Myron Marston,#846)
  • 防止消息预期在被调用后被自定义方法(例如 `with`)修改。(Sam Phippen 和 Melanie Gilman,#837)
  • 处理由于 RSpec 以外的东西篡改方法定义而导致无法删除方法 stub 的情况。例如,当您在之前对 `file` 对象上的方法进行 stubbing 后执行 `file.reopen(io)` 时,就会发生这种情况。(Myron Marston,#853)
  • 当接收到的消息参数在 `have_received(...).with(...)` 预期之前被修改时,提供清晰的错误。(Myron Marston,#868)

3.1.3 / 2014-10-08

完整变更日志

Bug 修复

  • 在与 `have_received` 匹配器一起使用时纠正接收到的消息计数。(Jon Rowe,#793)
  • 当您将 `allow_any_instance_of(...)` 或 `expect_any_instance_of(...)` 与 `have_received` 匹配器一起使用时,提供清晰的错误消息(它们不打算一起使用,之前会导致 rspec-mocks 中出现奇怪的内部错误)。(Jon Rowe,#799)。
  • 修复已验证 double 的 `with` 验证,使其应用于方法 stub。(Myron Marston,#790)

3.1.2 / 2014-09-26

完整变更日志

Bug 修复

  • 当您将 `allow(...)` 与 `have_received` 匹配器一起使用时,提供清晰的错误消息(它们不打算一起使用,之前会导致 rspec-mocks 中出现奇怪的内部错误)。(Jon Rowe,#788)。

3.1.1 / 2014-09-18

完整变更日志

Bug 修复

  • 防止在使用 `any_instance_of(...)` 时,Ruby 2.0 将包含的模块检测为预置的模块。(Tony Novak,#781)

3.1.0 / 2014-09-04

完整变更日志

增强

  • 添加间谍方法(`spy`、`ìnstance_spy`、`class_spy` 和 `object_spy`),它们创建双重作为空对象,用于测试中的间谍。(Sam Phippen,#671)
  • 当 `have_received` 匹配器与验证 double 和部分 double 一起使用时,将正确引发“未实现”错误。(Xavier Shay,#722)
  • 允许在 `with` 预期中使用匹配器代替关键字参数。(Xavier Shay,#726)
  • 将 `thrice` 修饰符添加到消息预期接口中,作为 `exactly(3).times` 的同义词。(Dennis Taylor,#753)
  • 添加更多 `thrice` 同义词,例如 `at_least(:thrice)`、`at_most(:thrice)`、`receive(...).thrice` 和 `have_received(...).thrice`。(Jon Rowe,#754)
  • 为部分 double 添加 `and_wrap_original` 修饰符以修改方法的响应。(Jon Rowe,#762)

Bug 修复

  • 从错误地导致文档中提及该方法的 `any_instance` 记录器中删除 `any_number_of_times`。(Jon Rowe,#760)
  • 防止在 Ruby 2.0 中将包含的模块检测为预置的模块。(Eugene Kenny,#771)

3.0.4 / 2014-08-14

完整变更日志

Bug 修复

  • 恢复 `kind_of(x)` 以使用 `arg.kind_of?(x)`(类似 RSpec 2)进行匹配,而不是 `x === arg`。(Jon Rowe,#750)

3.0.3 / 2014-07-21

完整变更日志

Bug 修复

  • 当 `have_received` 匹配器与验证 double 和部分 double 一起使用时,将正确引发“未实现”错误。(Xavier Shay,#722)
  • 使 `double.as_null_object.dup` 和 `double.as_null_object.clone` 使副本成为空对象。(Myron Marston,#732)
  • 不要在 1.8.7 中无意中定义 `BasicObject`。(Chris Griego,#739)

3.0.2 / 2014-06-19

完整变更日志

Bug 修复

  • 修复在模拟验证期间触发“在迭代期间无法向哈希中添加新键”的边缘情况。(Sam Phippen, Myron Marston, #711)
  • 修复已验证 double,使其在意外泄漏到另一个示例时,提供与普通 double 相同的清晰错误消息。(Myron Marston,#718)
  • 使 `ordered` 与精确接收计数一起工作。(Sam Phippen,#713)

3.0.1 / 2014-06-07

完整变更日志

Bug 修复

  • 修复 `receive_message_chain(...)`,使其与 `stub_chain` 一样支持 `with`。(Jon Rowe,#697)
  • 修复 `expect_any_instance_of` 中的回归,使其对 *任何* 实例而不是 *每个* 实例期望消息。(Myron Marston,#699)

3.0.0 / 2014-06-01

完整变更日志

Bug 修复

  • 修复模块预置检测,使其在 ruby 2.0 中对模块扩展到自身的用例正常工作。(Myron Marston)
  • 修复 `transfer_nested_constants` 选项,使其在示例结束时正确重置传输的常量。(Myron Marston)
  • 修复 `config.transfer_nested_constants = true`,以便在 stubbing 不是模块或类的常量时不会错误地出现错误。(Myron Marston)
  • 修复导致 `double(:class => SomeClass)` 后来触发无限递归的回归。(Myron Marston)
  • 修复 `have_received(...).with(...).ordered` 中的错误,它在检查顺序时没有考虑参数。(Myron Marston)
  • 修复 `have_received(...).ordered` 中的错误,它在检查顺序时错误地考虑了 stub。(Myron Marston)
  • 消息预期匹配器现在在预期未满足时显示来自参数匹配器的描述。(Jon Rowe)
  • 在 2.0.0-p195 上遇到 `TypeError` 时显示警告,它也受 https://bugs.ruby-lang.org/issues/8686 的影响。(Cezar Halmagean)。

3.0.0.rc1 / 2014-05-18

完整变更日志

3.0.0 的重大变更

  • 移除 `RSpec::Mocks::TestDouble.extend_onto`。(Myron Marston)
  • 移除 `RSpec::Mocks::ConstantStubber`。(Jon Rowe)
  • 使 Marshal 的猴子补丁支持对 stubbed 对象进行转储成为可选。(Xavier Shay)

增强

  • 在冻结对象上清理 stub 方法时,现在会发出警告,说明无法清理 stub,而不是崩溃。(Justin Coyne 和 Sam Phippen)
  • 为 `anything`、`duck_type` 和 `instance_of` 参数匹配器添加有意义的描述。(Jon Rowe)

Bug 修复

  • 修复在 3.0.0.beta2 中引入的回归,该回归导致 `double.as_null_object.to_str` 返回 double 而不是字符串。(Myron Marston)
  • 修复 `expect(dbl).to receive_message_chain(:foo, :bar)` 中的错误,它没有为链中的最后一条消息设置预期。(Jonathan del Strother)
  • 允许验证部分 double 具有 stubbed 的私有方法。(Xavier Shay)
  • 修复对已将单例类预置到其上的 Class 对象进行允许/预期消息的错误。(Jon Rowe)
  • 修复 1.8.7 中没有对部分 double 运行实现块的问题。(Maurício Linhares)
  • 通过提供我们自己的 inspect 输出,防止在 stubbing 在 `inspect` 中访问的 `any_instance` 方法时出现 `StackLevelTooDeep` 错误。(Jon Rowe)
  • 修复 `any_instance` 逻辑中的错误,该错误不允许您在配置了 `verify_partial_doubles` 时模拟或 stub 私有方法。(Oren Dobzinski)
  • 在尝试观察任何实例上的未实现方法时包含有用的错误消息。(Xavier Shay)
  • 修复 `and_call_original`,使其在继承层次结构中的多个类使用相同方法进行 stubbing 时正常工作。(Myron Marston)
  • 修复 `any_instance`,使其更新已经 stubbed 的现有实例。(Myron Marston)
  • 修复已验证 double,使其在失败消息中包含其类名。(Myron Marston)
  • 修复 `expect_any_instance_of`,使其在消息在已直接 stubbed 的单个实例上接收时,仍然满足预期。(Sam Phippen, Myron Marston)
  • 明确禁止使用 `any_instance` 模拟或 stub 定义在预置到类的模块上的方法。这之前会触发 `SystemStackError`,并且很难支持,所以我们目前不支持。(Myron Marston)

3.0.0.beta2 / 2014-02-17

完整变更日志

3.0.0 的重大变更

  • 将 `RSpec::Mocks::Mock` 重命名为 `RSpec::Mocks::Double`。(Myron Marston)
  • 更改在其他测试框架中集成 rspec-mocks 的方式。您现在需要在测试上下文中包含 `RSpec::Mocks::ExampleMethods`。(Myron Marston)
  • 防止 RSpec 模拟的 double 和部分 double 在每次测试的生命周期之外使用(例如,来自 `before(:all)` 挂钩)。(Sam Phippen)
  • 移除 `RSpec::Mocks.setup` 的 `host` 参数。相反,应该直接在使用 RSpec 的模拟功能的范围内包含 `RSpec::Mocks::ExampleMethods`。(Sam Phippen)
  • 使测试 double 在您尝试在它们被重置后使用它们时引发错误,以帮助在您意外保留对测试 double 的引用并在另一个示例中尝试重用它们时发现问题。(Myron Marston)
  • 移除对 `and_return { value }` 和没有参数的 `and_return` 的支持。(Yuji Nakayama)

增强

  • 添加 `receive_message_chain`,它为新的 allow/expect 语法提供旧 `stub_chain` 的功能。像这样使用它:`allow(...).to receive_message_chain(:foo, :bar, :bazz)`。(Sam Phippen)。
  • 更改参数匹配器以使用 `===` 作为它们的主要匹配协议,因为它们的语义类似于 case 或 rescue 语句(它使用 `===` 进行匹配)。(Myron Marston)
  • 添加 `RSpec::Mocks.with_temporary_scope`,它允许您在任意位置(例如 `before(:all)` 挂钩)创建临时的 rspec-mocks 范围。(Myron Marston)
  • 支持在使用已验证 double 检查元组时使用关键字参数。(Xavier Shay)

Bug 修复

  • 修复 3.0.0.beta1 中导致 `double("string_name" => :value)` 停止工作的回归。(Xavier Shay)
  • 修复 rspec-mocks 和 rspec-core 的交互方式,以便如果用户使用与 `RSpec::Mocks::ArgumentMatchers` 中的方法相同名称的 `let` 定义,用户的 `let` 优先。(Michi Huber, Myron Marston)
  • 修复已验证 double,使其方法匹配它们验证的接口的可见性(公共、受保护或私有)。(Myron Marston)
  • 修复已验证的空对象 double,使其不再错误地报告它们响应任何内容。它们只响应它们验证的接口上的可用方法。(Myron Marston)
  • 修复在没有显式配置的情况下使用旧的 `:should` 语法时的弃用警告,使其不再被像 rspec-rails 这样的扩展 gem 在调用 `config.add_stub_and_should_receive_to` 时静默。(Sam Phippen)
  • 修复 `expect` 语法,使其不再在您实际上没有这样做时错误地发出“您正在覆盖此 stub 的先前实现”警告。(Myron Marston)
  • 修复 `any_instance.unstub`,使其在子类上使用时,子类的超类已对 `any_instance.stub` 进行了调用。(Jon Rowe)
  • 修复 `stub_chain`/`receive_message_chain` 中导致它在将参数传递给 stubbed 方法时引发 `ArgumentError` 的回归。(Sam Phippen)
  • 在 stubbing 嵌套常量时,正确 stub 沿途未定义的父模块。(Xavier Shay)
  • 当常量未为验证类 double 定义时,引发 `VerifyingDoubleNotDefinedError`。(Maurício Linhares)
  • 移除 `Double#to_str`,它导致 `raise some_double` 行为混乱。(Maurício Linhares)

3.0.0.beta1 / 2013-11-07

完整变更日志

3.0.0 的重大变更

  • 如果使用 `should_not_receive(...).and_return`,则引发显式错误。(Sam Phippen)
  • 移除 1.8.6 解决方案。(Jon Rowe)
  • 移除 `stub!` 和 `unstub!`。(Sam Phippen)
  • 移除 `mock(name, methods)` 和 `stub(name, methods)`,保留 `double(name, methods)` 用于创建测试 double。(Sam Phippen, Michi Huber)
  • 移除 `any_number_of_times`,因为 `should_receive(:msg).any_number_of_times` 实际上是模拟中的一个 stub。(Sam Phippen)
  • 移除在多个示例中重复使用相同空对象测试替身的支持。测试替身设计为只在单个示例中使用。(Myron Marston)
  • 使at_least(0) 抛出错误。(Sam Phippen)
  • 移除对require 'spec/mocks' 的支持,该支持是为了向后兼容 RSpec 1 而保留的。(Myron Marston)
  • 提供给with 的块始终用作实现。(Xavier Shay)
  • 配置选项(在 2.99 中添加)用于将接收器传递给any_instance 实现块,现在默认值为“on”。(Sam Phippen)

增强

  • 允许have_received 匹配器使用块来对参数设置进一步的期望。(Tim Cowlishaw)
  • 提供instance_doubleclass_double 来创建验证替身,这些替身是从rspec-fire 移植来的。(Xavier Shay)
  • 验证替身上的as_null_object 只响应定义的方法。(Xavier Shay)
  • 提供object_double 来创建特定对象实例的已验证替身。(Xavier Shay)
  • 提供verify_partial_doubles 配置,在部分替身上提供类似object_double 的验证行为。(Xavier Shay)
  • 改进了替身创建的性能,特别是那些具有许多属性的替身。(Xavier Shay)
  • 可以配置常量存根的transfer_nested_constants 选项的默认值。(Xavier Shay)
  • 可以通过receive_messages(:message => :value) 批量允许或预期消息。(Jon Rowe)
  • allow(Klass.any_instance)expect(Klass.any_instance) 现在会打印警告。这通常是一个错误,用户通常希望使用allow_any_instance_ofexpect_any_instance_of。(Sam Phippen)
  • 如果基础模块已加载并且调用的方法的元数与实际实现的方法的元数不匹配,则instance_doubleclass_double 会抛出ArgumentError。(Andy Lindeman)
  • 间谍现在可以检查它们的调用顺序是否正确。(Jon Rowe)

弃用

  • 在没有明确配置的情况下使用旧的:should 语法已被弃用。它将继续工作,但如果您没有明确启用它,它将在 RSpec 3 中发出弃用警告。(Sam Phippen)

Bug 修复

  • 修复and_call_original 以处理涉及单例类祖先的复杂边缘情况。(Marc-André Lafortune, Myron Marston)
  • 在为意外参数生成错误消息时,如果#description 返回nil'',则使用#inspect 而不是#description,以便您仍然可以获得有用的消息。(Nick DeLuca)

2.99.4 / 2015-06-19

完整变更日志

Bug 修复

  • 添加使用with 且没有参数的弃用(例如with())。(Yousuke, #970)

2.99.3 / 2015-01-09

完整变更日志

Bug 修复

  • 修复了导致在测试替身从 YAML 反序列化时出现错误的回归。(Yuji Nakayama, #777)

2.99.2 / 2014-07-21

完整变更日志

增强

  • 警告即将对#=== 匹配和DateTime#=== 行为进行的更改。(Jon Rowe, #735)

2.99.1 / 2014-06-12

完整变更日志

Bug 修复

  • 修复了在每个示例结束时导致错误的错误,当时double.as_null_object 已被冻结。(Yuji Nakayama, #698)

弃用

  • 弃用冻结测试替身。(Yuji Nakayama, #698)

2.99.0 / 2014-06-01

完整变更日志

没有更改。只是将其从预发布版中删除。

2.99.0.rc1 / 2014-05-18

完整变更日志

弃用

  • 弃用RSpec::Mocks::TestDouble.extend_onto。(Myron Marston)
  • 弃用RSpec::Mocks::ConstantStubber。(Jon Rowe)
  • 弃用没有选择加入的Marshal.dump 猴子补丁。(Xavier Shay)

2.99.0.beta2 / 2014-02-17

完整变更日志

弃用

  • 弃用RSpec::Mocks::Mock,转而使用RSpec::Mocks::Double。(Myron Marston)
  • 弃用RSpec::Mocks.setuphost 参数。相反,RSpec::Mocks::ExampleMethods 应该直接包含在使用 RSpec 的模拟功能的范围内。(Sam Phippen)
  • 弃用在每个测试生命周期之外使用 rspec-mocks 的任何功能(例如,来自before(:all) 钩子)。(Myron Marston)
  • 弃用在另一个示例中重复使用测试替身。(Myron Marston)
  • 弃用and_return { value } 和没有参数的and_return。(Yuji Nakayama)

2.99.0.beta1 / 2013-11-07

完整变更日志

弃用

  • 期望使用 lambda 或其他强元数实现来对具有元数不匹配的存根方法进行存根,已被弃用,并且对它们的支持将在 3.0 中被移除。要么提供正确数量的参数,要么使用弱元数实现(使用 splat 或 proc 的方法)。(Jon Rowe)
  • 在多个示例中使用相同的测试替身实例已被弃用。测试替身只打算在一个示例中使用。模拟和存根始终在示例之间重置;然而,在 2.x 中,as_null_object 状态没有重置,一些用户依赖于此来获得一个用于多个示例的空对象替身。这种行为将在 3.0 中被移除。(Myron Marston)
  • any_instance 实现块在新的yield_receiver_to_any_instance_implementation_blocks 配置选项没有显式设置时使用时,打印详细的警告,因为 RSpec 3.0 将默认启用此新功能。(Sam Phippen)

增强

  • 添加一个配置选项,用于将接收器传递给any_instance 实现块。(Sam Phippen)

2.14.6 / 2014-02-20

完整变更日志

Bug 修复

  • 确保any_instance 方法存根和期望无论期望是否失败都将被拆卸。(Sam Phippen)

2.14.5 / 2014-02-01

完整变更日志

Bug 修复

  • 修复了导致块实现无法在 1.8.7 上接收所有参数的回归,如果该块还接收了一个块,这是因为 Proc#arity 无论块接收多少参数,如果它也接收了一个块,都会报告1。(Myron Marston)

2.14.4 / 2013-10-15

完整变更日志

Bug 修复

  • 修复了在“任何实例”上取消存根方法不会从现有实例中移除存根的问题 (Jon Rowe)
  • 修复了 receive(:message) do ... end 优先级阻止使用修改 (and_return 等) 的问题 (Jon Rowe)

2.14.3 / 2013-08-08

完整变更日志

Bug 修复

  • 修复了为其层次结构包含已预置模块的类的某些实例方法进行存根的问题 (Bradley Schaefer)

2.14.2 / 2013-07-30

完整变更日志

Bug 修复

  • 修复as_null_object 替身,使它们从to_ary 返回nil (Jon Rowe)。
  • 修复了 2.14 中导致stub!(具有隐式接收器)返回测试替身而不是存根方法的回归 (Myron Marston)。

2.14.1 / 2013-07-07

完整变更日志

Bug 修复

  • 恢复 2.13 及更早版本中的double.as_null_object 行为:替身的空性在早期示例中会保留在示例之间。虽然这不是预期用例(测试替身只打算在一个示例中使用),但我们不想在次要版本中破坏用户依赖的行为。这将在 2.99 中被弃用,并在 3.0 中被移除。(Myron Marston)

2.14.0 / 2013-07-06

完整变更日志

增强

  • 在自述文件中记录测试间谍。(Adarsh Pandit)
  • 添加一个array_including 匹配器。(Sam Phippen)
  • 添加模拟或存根方法的语法无关 API。这旨在用于 rspec-rails 等库,这些库需要模拟或存根方法,并且无论用户配置的语法如何都能正常工作 (Paul Annesley, Myron Marston 和 Sam Phippen)。

Bug 修复

  • 修复double,使它无论配置的语法如何都能正确设置传递的存根 (Paul Annesley)。
  • 允许在and_yieldand_raiseand_returnand_throw 结合使用块实现。这在 2.13.1 中得到了修复,但未能合并到 2.14.0.rc1 版本的 master 分支中 (Myron Marston)。
  • 当 rspec-mocks 尚未完全初始化时,Marshal.dump 不会不必要地复制对象。这可能会导致在使用spork 或类似的预加载宝石时出现错误 (Andy Lindeman)。

2.14.0.rc1 / 2013-05-27

完整变更日志

增强

  • 重构内部结构,使模拟代理方法和状态保存在模拟对象之外,而不是在模拟对象内部。这为未来的语法增强铺平了道路,并消除了对any_instance 复制和YAML 序列化等一些 hacky 工作方式的需求。请注意,该代码现在依赖于__id__ 为您想要模拟或存根的任何对象返回唯一且一致的值 (Myron Marston)。
  • 添加对测试间谍的支持。这允许您使用have_received 匹配器在之后验证消息是否已接收。请注意,您必须先存根该方法或使用空替身。(Joe Ferris 和 Joël Quenneville)
  • 使at_leastat_most 样式接收期望打印出它们期望至少或最多调用多少次,而不是仅仅打印期望中给出的调用次数 (Sam Phippen)
  • 使with 样式接收期望打印出它们期望的参数以及它们获得的参数 (Sam Phippen)
  • 修复了在 ruby 2.0.0p0 下出现的一些警告 (Sam Phippen)。
  • 添加一个用于消息期望的新:expect 语法 (Myron Marston 和 Sam Phippen)。

错误修复

  • 修复any_instance,使其能够在使用any_instance 对该类型进行存根方法时复制冻结对象 (Jon Rowe)。
  • 修复and_call_original,使其在传递了错误数量的参数时正确抛出ArgumentError (Jon Rowe)。
  • 修复 1.9.2 上的double,使您可以使用Array(my_double) 将它们包装在数组中 (Jon Rowe)。
  • 修复stub_consthide_const,使它们能够处理重新定义send 的常量 (Sam Phippen)。
  • 修复Marshal.dump 扩展,使其能够正确处理 nil。(Luke Imhoff, Jon Rowe)
  • 修复allow_message_expectations_on_nil 的隔离 (Jon Rowe)
  • 使用 inspect 来格式化期望中失败消息的实际参数 (#280, Ben Langfeld)
  • 防止错误初始化的测试替身 (#293) (Joseph Shraibman 和 Jon Rowe)

弃用

  • 弃用stubmock 作为double 的别名。double 是创建测试替身的最佳术语,并且只使用一个术语可以减少混淆 (Michi Huber)。
  • 弃用stub!unstub!,转而使用stubunstub (Jon Rowe)。
  • 弃用at_least(0).timesany_number_of_times (Michi Huber)。

2.13.1 / 2013-04-06

完整变更日志

错误修复

  • 允许将块实现与and_yieldand_raiseand_returnand_throw 结合使用 (Myron Marston)。

2.13.0 / 2013-02-23

完整变更日志

错误修复

  • 修复了导致奇怪行为的错误,当以前用多个返回值存根的方法(例如obj.stub(:foo).and_return(1, 2))后来用单个返回值模拟(例如obj.should_receive(:foo).once.and_return(1))时。(Myron Marston)
  • 修复了与已经具有多个具有不同with 约束的存根的方法的模拟期望相关的错误。以前,会使用第一个存根,即使它可能与传递的参数不匹配。修复会在收到消息之前延迟此决定,以便可以根据传递的参数选择适当的存根响应 (Myron Marston)。
  • 不要在模拟对象上额外调用nil?,以防nil? 本身被期望调用一定次数 (Myron Marston)。
  • 修复missing_default_stub_error 消息,使数组参数得到正确处理 (Myron Marston)。
  • 明确禁止any_instance.unstub! (Ryan Jones)。
  • 修复any_instance 存根,使其能够与Delegator 子类一起使用 (Myron Marston)。
  • 修复and_call_original,使其能够与Delegator 子类一起使用 (Myron Marston)。
  • 修复any_instance.should_not_receive,当在同一示例中对同一类使用any_instance.should_receive 时。以前,即使没有收到消息,它也会错误地报告失败 (Myron Marston)。

2.12.2 / 2013-01-27

完整变更日志

错误修复

  • 修复and_call_original,使其能够在为扩展到对象实例的模块定义的方法正常工作 (Myron Marston)。
  • 修复stub_const,当使用未定义的常量名称时,能够与以:: 为前缀的常量字符串正常工作,这是我在 2.12.1 版本的错误修复中错过的边缘情况 (Myron Marston)。
  • 确保在重置方法存根后,即使在单例模块(通过extend self 创建)上,当实例和单例版本的方法可见性不同时,也会恢复部分模拟上的方法可见性 (Andy Lindeman)。

2.12.1 / 2012-12-21

完整变更日志

错误修复

  • 修复any_instance,使其支持and_call_original。(Myron Marston)
  • 正确恢复存根的别名方法,这些方法在报告错误所有者的 ruby 上 (Myron Marston 和 Andy Lindeman)。
  • 修复hide_conststub_const,当使用定义的常量名称时,能够与以:: 为前缀的常量字符串正常工作 (Myron Marston)。

2.12.0 / 2012-11-12

完整变更日志

增强

  • and_raise 可以接受异常类和消息,更接近Kernel#raise(例如,foo.stub(:bar).and_raise(RuntimeError, "message"))(Bas Vodde)
  • 添加and_call_original,它将把消息委托给原始方法 (Myron Marston)。

弃用

  • 在使用and_returnshould_not_receive 时添加弃用警告 (Neha Kumari)

2.11.3 / 2012-09-19

完整变更日志

错误修复

  • 修复stub_const:transfer_nested_constants 选项,使其在存在继承常量时不会崩溃。(Myron Marston)
  • any_instance 存根可用于覆盖 Object#method 的类。(Andy Lindeman)
  • 使用 any_instance 存根的方法在测试结束后将被取消存根。(Andy Lindeman)
  • 修复在使用错误参数额外调用模拟类方法时出现的令人困惑的错误消息(Myron Marston)。

2.11.2 / 2012-08-11

完整变更日志

错误修复

  • 不要修改不支持 dup 的类的 dup。(David Chelimsky)
  • 修复 any_instance,使其能够正确地处理超类中定义的方法。(Daniel Eguzkiza)
  • 修复 stub_const,使其能够正确处理与顶级常量同名的嵌套常量(例如 "MyGem::Hash")。(Myron Marston)

2.11.1 / 2012-07-09

完整变更日志

错误修复

  • 修复 should_receive,使其在对没有实现的 as_null_object 双重调用时,如果之前存在相同方法的显式存根,则保持显式存根(而不是被空对象实现覆盖 - return self)。(Myron Marston)

2.11.0 / 2012-07-07

完整变更日志

增强

  • 公开 ArgumentListMatcher 作为正式 API
    • 支持像 Surrogate 这样的第三方模拟框架的使用
  • 添加 stub_const API,用于在一个示例的持续时间内存根常量(Myron Marston)。

错误修复

  • 修复边缘情况行为的回归。double.should_receive(:foo) { a } 在之前已设置 double.stub(:foo).and_return(a, b) 时会导致 NoMethodError(Myron Marston)。
  • 使用 any_instancedup 生成的无限循环。(Sidu Ponnappa @kaiwren)
  • double.should_receive(:foo).at_least(:once).and_return(a) 即使 :foo 已经被存根,也会始终返回 a。
  • 防止将空双重插入字符串作为整数时出现的无限循环("%i" % double.as_null_object)。(Myron Marston)
  • 修复 should_receive,使其在没有提供实现时保留空对象行为(例如返回自身)(Myron Marston)。
  • 修复 and_raise,使其默认情况下引发 RuntimeError 而不是 Exception,与 ruby 一样。(Andrew Marshall)

2.10.1 / 2012-05-05

完整变更日志

错误修复

  • 修复边缘情况行为的回归 (https://github.com/rspec/rspec-mocks/issues/132)
    • 修复了 object.should_receive(:message).at_least(0).times.and_return value 的失败
    • 修复了 object.should_not_receive(:message).and_return value 的失败

2.10.0 / 2012-05-03

完整变更日志

错误修复

  • exactlyat_most 预期被超过时快速失败

2.9.0 / 2012-03-17

完整变更日志

增强

  • 支持跨对象的顺序约束(preethiramdev)

错误修复

  • 允许将 as_null_object 传递给 with
  • 将 proc 传递给存根的块(Aubrey Rhodes)
  • 初始化子消息期望参数以匹配任何参数(#109 - preethiramdev)

2.8.0 / 2012-01-04

完整变更日志

此版本没有更改。只是与其他 rspec gem 一起发布。

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

完整变更日志

增强

  • 使用 __send__ 而不是 send (alextk)
  • 添加对 any_instance.stub_chain 的支持(Sidu Ponnappa)
  • 添加对基于 withany_instance 参数匹配的支持(Sidu Ponnappa 和 Andy Lindeman)

更改

  • 检查 failure_message_for_shouldfailure_message 而不是 description 来检测匹配器(Tibor Claassen)

错误修复

  • 将哈希传递给 any_instance.stub。(Justin Ko)
  • 允许调用 to_ary 而不引发 NoMethodError(Mikhail Dieterle)
  • any_instance 正确地恢复私有方法(Sidu Ponnappa)

2.6.0 / 2011-05-12

完整变更日志

增强

  • 添加对 any_instance.stubany_instance.should_receive 的支持(Sidu Ponnappa 和 Andy Lindeman)

错误修复

  • 修复了多个链共享消息并在最后以哈希结尾时无法返回正确值的错误

2.5.0 / 2011-02-05

完整变更日志

错误修复

  • 消息期望计数现在可以与存根一起使用(Damian Nurzynski)
  • 修复了使用错误参数接收消息时的失败消息(Josep M. Bach)

2.4.0 / 2011-01-02

完整变更日志

此版本没有功能上的更改,该版本是为了与 rspec-core-2.4.0 版本保持一致。

2.3.0 / 2010-12-12

完整变更日志

错误修复

  • 修复我们的 Marshal 扩展,使其不会干扰具有自己的 @mock_proxy 实例变量的对象。(Myron Marston)

2.2.0 / 2010-11-28

完整变更日志

增强

  • 在 irb 中添加了 "rspec/mocks/standalone",用于探索 rspec-mocks。

错误修复

  • 消除对没有括号的 splat 参数的警告(Gioele Barabucci)
  • 修复了 obj.should_receive(:foo).with(stub.as_null_object) 会出现误报的错误。

2.1.0 / 2010-11-07

完整变更日志

错误修复

  • 修复存根对象的序列化(Josep M Bach)

2.0.0 / 2010-10-10

完整变更日志

2.0.0.rc / 2010-10-05

完整变更日志

增强

  • 支持将块传递给期望块(Nicolas Braem)
    • obj.should_receive(:msg) {|&block| ... }

错误修复

  • 修复存根的 YAML 序列化(Myron Marston)
  • 修复 rdoc rake 任务(Hans de Graaff)

2.0.0.beta.22 / 2010-09-12

完整变更日志

错误修复

  • 修复了破坏了 obj.stub_chain(:a, :b => :c) 的回归
  • 修复了破坏了 obj.stub_chain(:a, :b) { :c } 的回归
  • 使用 as_null_objectrespond_to? 始终返回 true