This plugin disables observers in your specs, so that model specs can run in complete isolation.
Add to your Gemfile:
gem 'no_peeping_toms', :git => 'git://github.com/alindeman/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`
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
-
Brandon Keepers
-
Corey Haines
-
Drew Olson
-
Jeff Siegel
-
Zach Dennis
-
Andy Lindeman
-
Ryan McGeary
Copyright © 2007-2011 Pat Maddox, released under the MIT license.