Creates an instance of Model that is prohibited from accessing the
database*. For each key in hash_of_stubs, if the model has a
matching attribute (determined by asking it) are 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.

new_record? is overridden to return the result of id.nil? This
means that by default new_record? will return false. 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
new_record? will return true, 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.

Database Independence

stub_model does not make your
examples entirely database-independent. It does not stop the model class
itself from loading up its columns from the database. It just prevents data
access from the object itself. To completely decouple from the database,
take a look at libraries like unit_record or NullDB.