Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rspec/rspec-activemodel-mocks
Add stub_model and mock_model to rspec-mocks
https://github.com/rspec/rspec-activemodel-mocks
Last synced: 3 days ago
JSON representation
Add stub_model and mock_model to rspec-mocks
- Host: GitHub
- URL: https://github.com/rspec/rspec-activemodel-mocks
- Owner: rspec
- License: mit
- Created: 2014-01-06T01:50:47.000Z (almost 11 years ago)
- Default Branch: main
- Last Pushed: 2024-10-02T20:07:22.000Z (3 months ago)
- Last Synced: 2024-12-13T09:03:19.785Z (10 days ago)
- Language: Ruby
- Homepage:
- Size: 132 KB
- Stars: 118
- Watchers: 8
- Forks: 32
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: License.txt
Awesome Lists containing this project
README
# RSpec::ActiveModel::Mocks [![RSpec CI](https://github.com/rspec/rspec-activemodel-mocks/actions/workflows/ci.yml/badge.svg)](https://github.com/rspec/rspec-activemodel-mocks/actions/workflows/ci.yml)
RSpec::ActiveModel::Mocks provides tools for testing `ActiveModel` classes.
mock_model(Person, name: "Fred")
## Install
Add this line to your application's gemfile:
gem 'rspec-activemodel-mocks'
And then execute:
$ bundle
To finish the installation and start using `stub_model` and `mock_model`, require the
following file in your `spec_helper.rb` or `rails_helper.rb`.require 'rspec/active_model/mocks'
## Usage
### Mock
Creates a test double representing `string_or_model_class` with common
ActiveModel methods stubbed out. Additional methods may be easily stubbed
(via `add_stubs`) if `stubs` is passed. This is most useful for impersonating
models that don't exist yet.ActiveModel methods, plus `new_record?`, are stubbed out implicitly.
`new_record?` returns the inverse of `persisted?`, and is present only for
compatibility with extension frameworks that have yet to update themselves to
the ActiveModel API (which declares `persisted?`, not `new_record?`).`string_or_model_class` can be any of:
* A String representing a Class that does not exist
* A String representing a Class that extends `ActiveModel::Naming`
* A Class that extends `ActiveModel::Naming`### Stub
Creates an instance of `Model` with `to_param` stubbed using a generated value
that is unique to each object. If `Model` is an `ActiveRecord` model, it is
prohibited from accessing the database.For each key in `stubs`, if the model has a matching attribute (determined by
`respond_to?`) it is simply assigned the submitted values. If the model does
not have a matching attribute, the key/value pair is assigned as a stub return
value using RSpec's mocking/stubbing framework.`persisted?` is overridden to return the result of `!id.nil?` This means that
by default `persisted?` will return true. If you want the object to behave as a
new record, sending it `as_new_record` will set the id to nil. You can also
explicitly set `:id => nil`, in which case `persisted?` will return false, but
using `as_new_record` makes the example a bit more descriptive.While you can use `stub_model` in any example (model, view, controller,
helper), it is especially useful in view examples, which are inherently more
state-based than interaction-based.stub_model(Person)
stub_model(Person).as_new_record
stub_model(Person, :to_param => 37)
stub_model(Person) {|person| person.first_name = "David"}