= no_peeping_toms
This plugin disables observers in your specs, so that model specs can run in complete isolation.
== NOTE: This functionality is included in Rails 3.1 and above: https://apidock.com/rails/v3.1.0/ActiveModel/ObserverArray/disable. Use that instead!
== Installation
Add to your Gemfile:
gem 'no_peeping_toms', :git => 'git://github.com/patmaddox/no-peeping-toms.git'
and run bundle install
.
no_peeping_toms >= 2.0.0 only supports on Rails 3. If you need Rails 2 support, use 1.1.0: gem install no_peeping_toms -v 1.1.0
== Usage
To disable observers, place the following code in your test.rb, or spec_helper.rb, or wherever:
ActiveRecord::Observer.disable_observers
You can easily reenable observers:
ActiveRecord::Observer.enable_observers
You can choose to run some code with specific observers turned on. This is useful when spec'ing an observer. For example, if you write the following observer:
class PersonObserver < ActiveRecord::Observer
def before_update(person)
old_person = Person.find person.id
if old_person.name != person.name
NameChange.create! :person => person, :old_name => old_person.name, :new_name => person.name
end
end
end
You can spec the Person class in complete isolation.
describe Person, " when changing a name" do
before(:each) do
@person = Person.create! :name => "Pat Maddox"
end
# By default, don't run any observers
it "should not register a name change" do
lambda { @person.update_attribute :name, "Don Juan Demarco" }.should_not change(NameChange, :count)
end
# Run only a portion of code with certain observers turned on
it "should register a name change with the person observer turned on" do
ActiveRecord::Observer.with_observers(:person_observer) do
lambda { @person.update_attribute :name, "Don Juan Demarco" }.should change(NameChange, :count).by(1)
end
lambda { @person.update_attribute :name, "Man Without a Name" }.should_not change(NameChange, :count)
end
end
== Credits
- Brandon Keepers
- Corey Haines
- Drew Olson
- Jeff Siegel
- Zach Dennis
- Andy Lindeman
- Ryan McGeary
Copyright (c) 2007-2011 Pat Maddox, released under the MIT license.