Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 652 lines (492 sloc) 26.518 kb

3.0.0.rc1 Development

Full Changelog

Breaking Changes for 3.0.0:

  • Remove RSpec::Mocks::TestDouble.extend_onto. (Myron Marston)
  • Remove RSpec::Mocks::ConstantStubber. (Jon Rowe)
  • Make monkey-patch of Marshal to support dumping of stubbed objects opt-in. (Xavier Shay)

Enhancements:

  • Instead of crashing when cleaning up stub methods on a frozen object, it now issues a warning explaining that it's impossible to clean up the stubs. (Justin Coyne and Sam Phippen)
  • Add meaningful descriptions to anything, duck_type and instance_of argument matchers. (Jon Rowe)

Bug Fixes:

  • Fix regression introduced in 3.0.0.beta2 that caused double.as_null_object.to_str to return the double rather than a string. (Myron Marston)
  • Fix bug in expect(dbl).to receive_message_chain(:foo, :bar) where it was not setting an expectation for the last message in the chain. (Jonathan del Strother)
  • Allow verifying partial doubles to have private methods stubbed. (Xavier Shay)
  • Fix bug with allowing/expecting messages on Class objects which have had their singleton class prepended to. (Jon Rowe)
  • Fix an issue with 1.8.7 not running implementation blocks on partial doubles. (Maurício Linhares)
  • Prevent StackLevelTooDeep errors when stubbing an any_instance method that's accessed in inspect by providing our own inspect output. (Jon Rowe)
  • Fix bug in any_instance logic that did not allow you to mock or stub private methods if verify_partial_doubles was configured. (Oren Dobzinski)
  • Include useful error message when trying to observe an unimplemented method on an any instance. (Xavier Shay)
  • Fix and_call_original to work properly when multiple classes in an inheritance hierarchy have been stubbed with the same method. (Myron Marston)
  • Fix any_instance so that it updates existing instances that have already been stubbed. (Myron Marston)

3.0.0.beta2 / 2014-02-17

Full Changelog

Breaking Changes for 3.0.0:

  • Rename RSpec::Mocks::Mock to RSpec::Mocks::Double. (Myron Marston)
  • Change how to integrate rspec-mocks in other test frameworks. You now need to include RSpec::Mocks::ExampleMethods in your test context. (Myron Marston)
  • Prevent RSpec mocks' doubles and partial doubles from being used outside of the per-test lifecycle (e.g. from a before(:all) hook). (Sam Phippen)
  • Remove the host argument of RSpec::Mocks.setup. Instead RSpec::Mocks::ExampleMethods should be included directly in the scope where RSpec's mocking capabilities are used. (Sam Phippen)
  • Make test doubles raise errors if you attempt to use them after they get reset, to help surface issues when you accidentally retain references to test doubles and attempt to reuse them in another example. (Myron Marston)
  • Remove support for and_return { value } and and_return without arguments. (Yuji Nakayama)

Enhancements:

  • Add receive_message_chain which provides the functionality of the old stub_chain for the new allow/expect syntax. Use it like so: allow(...).to receive_message_chain(:foo, :bar, :bazz). (Sam Phippen).
  • Change argument matchers to use === as their primary matching protocol, since their semantics mirror that of a case or rescue statement (which uses === for matching). (Myron Marston)
  • Add RSpec::Mocks.with_temporary_scope, which allows you to create temporary rspec-mocks scopes in arbitrary places (such as a before(:all) hook). (Myron Marston)
  • Support keyword arguments when checking arity with verifying doubles. (Xavier Shay)

Bug Fixes:

  • Fix regression in 3.0.0.beta1 that caused double("string_name" => :value) to stop working. (Xavier Shay)
  • Fix the way rspec-mocks and rspec-core interact so that if users define a let with the same name as one of the methods from RSpec::Mocks::ArgumentMatchers, the user's let takes precedence. (Michi Huber, Myron Marston)
  • Fix verified doubles so that their methods match the visibility (public, protected or private) of the interface they verify against. (Myron Marston)
  • Fix verified null object doubles so that they do not wrongly report that they respond to anything. They only respond to methods available on the interface they verify against. (Myron Marston)
  • Fix deprecation warning for use of old :should syntax w/o explicit config so that it no longer is silenced by an extension gem such as rspec-rails when it calls config.add_stub_and_should_receive_to. (Sam Phippen)
  • Fix expect syntax so that it does not wrongly emit a "You're overriding a previous implementation for this stub" warning when you are not actually doing that. (Myron Marston)
  • Fix any_instance.unstub when used on sub classes for whom the super class has had any_instance.stub invoked on. (Jon Rowe)
  • Fix regression in stub_chain/receive_message_chain that caused it to raise an ArgumentError when passing args to the stubbed methods. (Sam Phippen)
  • Correct stub of undefined parent modules all the way down when stubbing a nested constant. (Xavier Shay)
  • Raise VerifyingDoubleNotDefinedError when a constant is not defined for a verifying class double. (Maurício Linhares)
  • Remove Double#to_str, which caused confusing raise some_double behavior. (Maurício Linhares)

3.0.0.beta1 / 2013-11-07

Full Changelog

Breaking Changes for 3.0.0:

  • Raise an explicit error if should_not_receive(...).and_return is used. (Sam Phippen)
  • Remove 1.8.6 workarounds. (Jon Rowe)
  • Remove stub! and unstub!. (Sam Phippen)
  • Remove mock(name, methods) and stub(name, methods), leaving double(name, methods) for creating test doubles. (Sam Phippen, Michi Huber)
  • Remove any_number_of_times since should_receive(:msg).any_number_of_times is really a stub in a mock's clothing. (Sam Phippen)
  • Remove support for re-using the same null-object test double in multiple examples. Test doubles are designed to only live for one example. (Myron Marston)
  • Make at_least(0) raise an error. (Sam Phippen)
  • Remove support for require 'spec/mocks' which had been kept in place for backwards compatibility with RSpec 1. (Myron Marston)
  • Blocks provided to with are always used as implementation. (Xavier Shay)
  • The config option (added in 2.99) to yield the receiver to any_instance implementation blocks now defaults to "on". (Sam Phippen)

Enhancements:

  • Allow the have_received matcher to use a block to set further expectations on arguments. (Tim Cowlishaw)
  • Provide instance_double and class_double to create verifying doubles, ported from rspec-fire. (Xavier Shay)
  • as_null_object on a verifying double only responds to defined methods. (Xavier Shay)
  • Provide object_double to create verified doubles of specific object instances. (Xavier Shay)
  • Provide verify_partial_doubles configuration that provides object_double like verification behaviour on partial doubles. (Xavier Shay)
  • Improved performance of double creation, particularly those with many attributes. (Xavier Shay)
  • Default value of transfer_nested_constants option for constant stubbing can be configured. (Xavier Shay)
  • Messages can be allowed or expected on in bulk via receive_messages(:message => :value). (Jon Rowe)
  • allow(Klass.any_instance) and expect(Klass.any_instance) now print a warning. This is usually a mistake, and users usually want allow_any_instance_of or expect_any_instance_of instead. (Sam Phippen)
  • instance_double and class_double raise ArgumentError if the underlying module is loaded and the arity of the method being invoked does not match the arity of the method as it is actually implemented. (Andy Lindeman)
  • Spies can now check their invocation ordering is correct. (Jon Rowe)

Deprecations:

  • Using the old :should syntax without explicitly configuring it is deprecated. It will continue to work but will emit a deprecation warning in RSpec 3 if you do not explicitly enable it. (Sam Phippen)

Bug Fixes:

  • Fix and_call_original to handle a complex edge case involving singleton class ancestors. (Marc-André Lafortune, Myron Marston)
  • When generating an error message for unexpected arguments, use #inspect rather than #description if #description returns nil or '' so that you still get a useful message. (Nick DeLuca)

2.99.0.beta2 / 2014-02-17

Full Changelog

Deprecations:

  • Deprecate RSpec::Mocks::Mock in favor of RSpec::Mocks::Double. (Myron Marston)
  • Deprecate the host argument of RSpec::Mocks.setup. Instead RSpec::Mocks::ExampleMethods should be included directly in the scope where RSpec's mocking capabilities are used. (Sam Phippen)
  • Deprecate using any of rspec-mocks' features outside the per-test lifecycle (e.g. from a before(:all) hook). (Myron Marston)
  • Deprecate re-using a test double in another example. (Myron Marston)
  • Deprecate and_return { value } and and_return without arguments. (Yuji Nakayama)

2.99.0.beta1 / 2013-11-07

Full Changelog

Deprecations

  • Expecting to use lambdas or other strong arity implementations for stub methods with mis-matched arity is deprecated and support for them will be removed in 3.0. Either provide the right amount of arguments or use a weak arity implementation (methods with splats or procs). (Jon Rowe)
  • Using the same test double instance in multiple examples is deprecated. Test doubles are only meant to live for one example. The mocks and stubs have always been reset between examples; however, in 2.x the as_null_object state was not reset and some users relied on this to have a null object double that is used for many examples. This behavior will be removed in 3.0. (Myron Marston)
  • Print a detailed warning when an any_instance implementation block is used when the new yield_receiver_to_any_instance_implementation_blocks config option is not explicitly set, as RSpec 3.0 will default to enabling this new feature. (Sam Phippen)

Enhancements:

  • Add a config option to yield the receiver to any_instance implementation blocks. (Sam Phippen)

2.14.6 / 2014-02-20

full changelog

Bug Fixes:

  • Ensure any_instance method stubs and expectations are torn down regardless of expectation failures. (Sam Phippen)

2.14.5 / 2014-02-01

Full Changelog

Bug Fixes:

  • Fix regression that caused block implementations to not receive all args on 1.8.7 if the block also receives a block, due to Proc#arity reporting 1 no matter how many args the block receives if it receives a block, too. (Myron Marston)

2.14.4 / 2013-10-15

Full Changelog

Bug Fixes:

  • Fix issue where unstubing methods on "any instances" would not remove stubs on existing instances (Jon Rowe)
  • Fix issue with receive(:message) do ... end precedence preventing the usage of modifications (and_return etc) (Jon Rowe)

2.14.3 / 2013-08-08

Full Changelog

Bug Fixes:

  • Fix stubbing some instance methods for classes whose hierarchy includes a prepended Module (Bradley Schaefer)

2.14.2 / 2013-07-30

Full Changelog

Bug Fixes:

  • Fix as_null_object doubles so that they return nil from to_ary (Jon Rowe).
  • Fix regression in 2.14 that made stub! (with an implicit receiver) return a test double rather than stub a method (Myron Marston).

2.14.1 / 2013-07-07

Full Changelog

Bug Fixes:

  • Restore double.as_null_object behavior from 2.13 and earlier: a double's nullness persisted between examples in earlier examples. While this is not an intended use case (test doubles are meant to live for only one example), we don't want to break behavior users rely on in a minor relase. This will be deprecated in 2.99 and removed in 3.0. (Myron Marston)

2.14.0 / 2013-07-06

Full Changelog

Enhancements:

  • Document test spies in the readme. (Adarsh Pandit)
  • Add an array_including matcher. (Sam Phippen)
  • Add a syntax-agnostic API for mocking or stubbing a method. This is intended for use by libraries such as rspec-rails that need to mock or stub a method, and work regardless of the syntax the user has configured (Paul Annesley, Myron Marston and Sam Phippen).

Bug Fixes:

  • Fix double so that it sets up passed stubs correctly regardless of the configured syntax (Paul Annesley).
  • Allow a block implementation to be used in combination with and_yield, and_raise, and_return or and_throw. This got fixed in 2.13.1 but failed to get merged into master for the 2.14.0.rc1 release (Myron Marston).
  • Marshal.dump does not unnecessarily duplicate objects when rspec-mocks has not been fully initialized. This could cause errors when using spork or similar preloading gems (Andy Lindeman).

2.14.0.rc1 / 2013-05-27

Full Changelog

Enhancements:

  • Refactor internals so that the mock proxy methods and state are held outside of the mocked object rather than inside it. This paves the way for future syntax enhancements and removes the need for some hacky work arounds for any_instance dup'ing and YAML serialization, among other things. Note that the code now relies upon __id__ returning a unique, consistent value for any object you want to mock or stub (Myron Marston).
  • Add support for test spies. This allows you to verify a message was received afterwards using the have_received matcher. Note that you must first stub the method or use a null double. (Joe Ferris and Joël Quenneville)
  • Make at_least and at_most style receive expectations print that they were expecting at least or at most some number of calls, rather than just the number of calls given in the expectation (Sam Phippen)
  • Make with style receive expectations print the args they were expecting, and the args that they got (Sam Phippen)
  • Fix some warnings seen under ruby 2.0.0p0 (Sam Phippen).
  • Add a new :expect syntax for message expectations (Myron Marston and Sam Phippen).

Bug fixes

  • Fix any_instance so that a frozen object can be dup'd when methods have been stubbed on that type using any_instance (Jon Rowe).
  • Fix and_call_original so that it properly raises an ArgumentError when the wrong number of args are passed (Jon Rowe).
  • Fix double on 1.9.2 so you can wrap them in an Array using Array(my_double) (Jon Rowe).
  • Fix stub_const and hide_const to handle constants that redefine send (Sam Phippen).
  • Fix Marshal.dump extension so that it correctly handles nil. (Luke Imhoff, Jon Rowe)
  • Fix isolation of allow_message_expectations_on_nil (Jon Rowe)
  • Use inspect to format actual arguments on expectations in failure messages (#280, Ben Langfeld)
  • Protect against improperly initialised test doubles (#293) (Joseph Shraibman and Jon Rowe)

Deprecations

  • Deprecate stub and mock as aliases for double. double is the best term for creating a test double, and it reduces confusion to have only one term (Michi Huber).
  • Deprecate stub! and unstub! in favor of stub and unstub (Jon Rowe).
  • Deprecate at_least(0).times and any_number_of_times (Michi Huber).

2.13.1 / 2013-04-06

Full Changelog

Bug fixes

  • Allow a block implementation to be used in combination with and_yield, and_raise, and_return or and_throw (Myron Marston).

2.13.0 / 2013-02-23

Full Changelog

Bug fixes

  • Fix bug that caused weird behavior when a method that had previously been stubbed with multiple return values (e.g. obj.stub(:foo).and_return(1, 2)) was later mocked with a single return value (e.g. obj.should_receive(:foo).once.and_return(1)). (Myron Marston)
  • Fix bug related to a mock expectation for a method that already had multiple stubs with different with constraints. Previously, the first stub was used, even though it may not have matched the passed args. The fix defers this decision until the message is received so that the proper stub response can be chosen based on the passed arguments (Myron Marston).
  • Do not call nil? extra times on a mocked object, in case nil? itself is expected a set number of times (Myron Marston).
  • Fix missing_default_stub_error message so array args are handled properly (Myron Marston).
  • Explicitly disallow any_instance.unstub! (Ryan Jones).
  • Fix any_instance stubbing so that it works with Delegator subclasses (Myron Marston).
  • Fix and_call_original so that it works with Delegator subclasses (Myron Marston).
  • Fix any_instance.should_not_receive when any_instance.should_receive is used on the same class in the same example. Previously it would wrongly report a failure even when the message was not received (Myron Marston).

2.12.2 / 2013-01-27

Full Changelog

Bug fixes

  • Fix and_call_original to work properly for methods defined on a module extended onto an object instance (Myron Marston).
  • Fix stub_const with an undefined constnat name to work properly with constant strings that are prefixed with :: -- and edge case I missed in the bug fix in the 2.12.1 release (Myron Marston).
  • Ensure method visibility on a partial mock is restored after reseting method stubs, even on a singleton module (created via extend self) when the method visibility differs between the instance and singleton versions (Andy Lindeman).

2.12.1 / 2012-12-21

Full Changelog

Bug fixes

  • Fix any_instance to support and_call_original. (Myron Marston)
  • Properly restore stubbed aliased methods on rubies that report the incorrect owner (Myron Marston and Andy Lindeman).
  • Fix hide_const and stub_const with a defined constnat name to work properly with constant strings that are prefixed with :: (Myron Marston).

2.12.0 / 2012-11-12

Full Changelog

Enhancements

  • and_raise can accept an exception class and message, more closely matching Kernel#raise (e.g., foo.stub(:bar).and_raise(RuntimeError, "message")) (Bas Vodde)
  • Add and_call_original, which will delegate the message to the original method (Myron Marston).

Deprecations:

  • Add deprecation warning when using and_return with should_not_receive (Neha Kumari)

2.11.3 / 2012-09-19

Full Changelog

Bug fixes

  • Fix :transfer_nested_constants option of stub_const so that it doesn't blow up when there are inherited constants. (Myron Marston)
  • any_instance stubs can be used on classes that override Object#method. (Andy Lindeman)
  • Methods stubbed with any_instance are unstubbed after the test finishes. (Andy Lindeman)
  • Fix confusing error message when calling a mocked class method an extra time with the wrong arguments (Myron Marston).

2.11.2 / 2012-08-11

Full Changelog

Bug fixes

  • Don't modify dup on classes that don't support dup (David Chelimsky)
  • Fix any_instance so that it works properly with methods defined on a superclass. (Daniel Eguzkiza)
  • Fix stub_const so that it works properly for nested constants that share a name with a top-level constant (e.g. "MyGem::Hash"). (Myron Marston)

2.11.1 / 2012-07-09

Full Changelog

Bug fixes

  • Fix should_receive so that when it is called on an as_null_object double with no implementation, and there is a previous explicit stub for the same method, the explicit stub remains (rather than being overriden with the null object implementation--return self). (Myron Marston)

2.11.0 / 2012-07-07

Full Changelog

Enhancements

  • Expose ArgumentListMatcher as a formal API
    • supports use by 3rd party mock frameworks like Surrogate
  • Add stub_const API to stub constants for the duration of an example (Myron Marston).

Bug fixes

  • Fix regression of edge case behavior. double.should_receive(:foo) { a } was causing a NoMethodError when double.stub(:foo).and_return(a, b) had been setup before (Myron Marston).
  • Infinite loop generated by using any_instance and dup. (Sidu Ponnappa @kaiwren)
  • double.should_receive(:foo).at_least(:once).and_return(a) always returns a even if :foo is already stubbed.
  • Prevent infinite loop when interpolating a null double into a string as an integer ("%i" % double.as_null_object). (Myron Marston)
  • Fix should_receive so that null object behavior (e.g. returning self) is preserved if no implementation is given (Myron Marston).
  • Fix and_raise so that it raises RuntimeError rather than Exception by default, just like ruby does. (Andrew Marshall)

2.10.1 / 2012-05-05

Full Changelog

Bug fixes

  • fix regression of edge case behavior (https://github.com/rspec/rspec-mocks/issues/132)
    • fixed failure of object.should_receive(:message).at_least(0).times.and_return value
    • fixed failure of object.should_not_receive(:message).and_return value

2.10.0 / 2012-05-03

Full Changelog

Bug fixes

  • fail fast when an exactly or at_most expectation is exceeded

2.9.0 / 2012-03-17

Full Changelog

Enhancements

  • Support order constraints across objects (preethiramdev)

Bug fixes

  • Allow a as_null_object to be passed to with
  • Pass proc to block passed to stub (Aubrey Rhodes)
  • Initialize child message expectation args to match any args (#109 - preethiramdev)

2.8.0 / 2012-01-04

Full Changelog

No changes for this release. Just releasing with the other rspec gems.

2.8.0.rc2 / 2011-12-19

Full Changelog

No changes for this release. Just releasing with the other rspec gems.

2.8.0.rc1 / 2011-11-06

Full Changelog

Enhancements

  • Eliminate Ruby warnings (Matijs van Zuijlen)

2.7.0 / 2011-10-16

Full Changelog

Enhancements

  • Use __send__ rather than send (alextk)
  • Add support for any_instance.stub_chain (Sidu Ponnappa)
  • Add support for any_instance argument matching based on with (Sidu Ponnappa and Andy Lindeman)

Changes

  • Check for failure_message_for_should or failure_message instead of description to detect a matcher (Tibor Claassen)

Bug fixes

  • pass a hash to any_instance.stub. (Justin Ko)
  • allow to_ary to be called without raising NoMethodError (Mikhail Dieterle)
  • any_instance properly restores private methods (Sidu Ponnappa)

2.6.0 / 2011-05-12

Full Changelog

Enhancements

  • Add support for any_instance.stub and any_instance.should_receive (Sidu Ponnappa and Andy Lindeman)

Bug fixes

  • fix bug in which multiple chains with shared messages ending in hashes failed to return the correct value

2.5.0 / 2011-02-05

Full Changelog

Bug fixes

  • message expectation counts now work in combination with a stub (Damian Nurzynski)
  • fix failure message when message received with incorrect args (Josep M. Bach)

2.4.0 / 2011-01-02

Full Changelog

No functional changes in this release, which was made to align with the rspec-core-2.4.0 release.

2.3.0 / 2010-12-12

Full Changelog

Bug fixes

  • Fix our Marshal extension so that it does not interfere with objects that have their own @mock_proxy instance variable. (Myron Marston)

2.2.0 / 2010-11-28

Full Changelog

Enhancements

  • Added "rspec/mocks/standalone" for exploring the rspec-mocks in irb.

Bug fix

  • Eliminate warning on splat args without parens (Gioele Barabucci)
  • Fix bug where obj.should_receive(:foo).with(stub.as_null_object) would pass with a false positive.

2.1.0 / 2010-11-07

Full Changelog

Bug fixes

  • Fix serialization of stubbed object (Josep M Bach)

2.0.0 / 2010-10-10

Full Changelog

2.0.0.rc / 2010-10-05

Full Changelog

Enhancements

  • support passing a block to an expectation block (Nicolas Braem)
    • obj.should_receive(:msg) {|&block| ... }

Bug fixes

  • Fix YAML serialization of stub (Myron Marston)
  • Fix rdoc rake task (Hans de Graaff)

2.0.0.beta.22 / 2010-09-12

Full Changelog

Bug fixes

  • fixed regression that broke obj.stub_chain(:a, :b => :c)
  • fixed regression that broke obj.stub_chain(:a, :b) { :c }
  • respond_to? always returns true when using as_null_object
Something went wrong with that request. Please try again.