1 require File.dirname(__FILE__) + "/../spec_helper"
3 describe MethodObserver do
5 class TestObserver < MethodObserver
6 def before_observed_method(*args, &block); end
7 def after_observed_method(*args); end
17 @object = TestObject.new
18 @object.stub!(:before_result=).and_return(nil)
19 @object.stub!(:after_result=).and_return(:success)
20 @observer = TestObserver.new
21 @observer.observe(@object)
24 it "should permit only one object to be observed" do
25 lambda { @observer.observe(@object)}.should raise_error(MethodObserver::ObserverCannotObserveTwiceError)
28 it "should have a target equal to the observed object" do
29 @observer.should respond_to(:target)
30 @observer.target.should == @object
33 it "should invoke the before_ method before the object's method is invoked" do
34 @observer.should_receive(:before_observed_method) do
35 @observer.result.should be_nil
37 @object.observed_method.should == :success
38 @observer.result.should == :success
41 it "should invoke the after_ method after the object's method is invoked" do
42 @observer.should_receive(:after_observed_method) do
43 @observer.result.should == :success
45 @object.observed_method.should == :success
46 @observer.result.should == :success