Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

file 68 lines (47 sloc) 2.099 kb

no_peeping_toms

This plugin disables observers in your specs, so that model specs can run in complete isolation.

Installation

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`

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 © 2007-2011 Pat Maddox, released under the MIT license.

Something went wrong with that request. Please try again.