no-peeping-toms

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 enab…

  • Owner: patmaddox/no-peeping-toms
  • Platform:
  • License::
  • Category::
  • Topic:
  • Like:
    2
      Compare:

Github stars Tracking Chart

= 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.

Main metrics

Overview
Name With Ownerpatmaddox/no-peeping-toms
Primary LanguageRuby
Program languageRuby (Language Count: 1)
Platform
License:
所有者活动
Created At2008-03-04 16:09:25
Pushed At2017-09-15 17:45:54
Last Commit At2017-09-15 11:45:53
Release Count2
Last Release Namev1.1.0 (Posted on )
First Release Namev1.0.1 (Posted on )
用户参与
Stargazers Count135
Watchers Count2
Fork Count39
Commits Count56
Has Issues Enabled
Issues Count11
Issue Open Count5
Pull Requests Count6
Pull Requests Open Count1
Pull Requests Close Count11
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private