no_peeping_toms ============= Originally a plugin, now gemified. 'gem install no_peeping_toms' This plugin disables observers in your specs, so that model specs can run in complete isolation. 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 Cool people who have contributed to NoPeepingToms: * Brandon Keepers * Corey Haines * Jeff Siegel * Drew Olson * Zach Dennis If you think your name should be here, shoot me an email and I'll add it ASAP. Copyright (c) 2007-2010 Pat Maddox, released under the MIT license