Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pat/not-a-mock
A cleaner and DRYer alternative to mocking and stubbing with RSpec.
https://github.com/pat/not-a-mock
Last synced: about 7 hours ago
JSON representation
A cleaner and DRYer alternative to mocking and stubbing with RSpec.
- Host: GitHub
- URL: https://github.com/pat/not-a-mock
- Owner: pat
- License: mit
- Created: 2008-04-25T07:47:19.000Z (over 16 years ago)
- Default Branch: master
- Last Pushed: 2015-11-15T13:01:58.000Z (about 9 years ago)
- Last Synced: 2024-11-30T09:37:13.062Z (about 1 month ago)
- Language: Ruby
- Homepage: http://notahat.com/not_a_mock
- Size: 226 KB
- Stars: 10
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README
- License: MIT-LICENSE
Awesome Lists containing this project
README
= Not A Mock
A cleaner and DRYer alternative to mocking and stubbing with RSpec.
https://github.com/notahat/not_a_mock
== A Quick Introduction
=== Mocking (Not)
When you're setting up for a spec, you can ask that method calls on an object be recorded:
object.track_methods(:name, :length)
Once your code has run, you can make assertions about what methods were called, what arguments
they took, their results, etc.object.should have_received(:length).without_args.and_returned(42)
object.should have_received(:name).twice
See NotAMock::Matchers for an explanation of the available assertions, plus
Object#track_methods and Object#untrack_methods.
=== Stubbing==== Stubbing Methods
You can replace a method on an object with a stub version like this:
object.stub_method(:method => return_value)
Any call to +method+ after this will return +return_value+ without invoking
the method's usual code.
Calls to stub methods are recorded as if you had called +track_methods+
on them, so you can make assertions about them as shown above.
See Object#stub_methods, Object#unstub_methods.==== Stubbing Objects
You can also replace an entire object with a stub version like this:
my_object = MyClass.stub_instance(:method_a => return_value, :method_b => return_value, ...)
The returned +my_object+ is a stub instance of MyClass with the given methods
defined to provide the corresponding return values.
See Object.stub_instance.==== Stubbing ActiveRecord Instances
When you call +stub_instance+ on an ActiveRecord::Base subclass,
Not A Mock automatically provides an +id+ method and generates an
id for the object.== Installation
(The following describes using NotAMock with Rails. It should also be possible
to use it outside of Rails, but I haven't tried it.)First, install the rspec and rspec_on_rails plugins, then install the not_a_mock plugin:
ruby script/plugin install http://github.com/notahat/not_a_mock.git
Finally, add the following to your project's spec/spec_helper.rb:
config.mock_with NotAMock::RspecMockFrameworkAdapter
== Contributing
Send bugs, patches, and suggestions to Pete Yandell ([email protected])
Thanks to Pat Allan and Steve Hayes for contributing patches.