Navigation Menu

Skip to content
This repository has been archived by the owner on May 11, 2022. It is now read-only.

NOTE: This functionality is included in Rails 3.1 and above. Disables observers during testing, allowing you to write model tests that are completely decoupled from the observer. Also lets you enable observers for a certain block of code, so that you can write observer tests

patmaddox/no-peeping-toms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

NOTE: This functionality is included in Rails 3.1 and above. Disables observers during testing, allowing you to write model tests that are completely decoupled from the observer. Also lets you enable observers for a certain block of code, so that you can write observer tests

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages