1
require File.dirname(__FILE__) + '/../../spec_helper.rb'
5
describe "A method stub" do
8
def self.existing_class_method
12
def existing_instance_method
16
@instance = @class.new
19
it "should return expected value when expected message is received" do
20
@instance.stub!(:msg).and_return(:return_value)
21
@instance.msg.should equal(:return_value)
22
@instance.rspec_verify
25
it "should ignore when expected message is received" do
29
@instance.rspec_verify
30
end.should_not raise_error
33
it "should ignore when message is received with args" do
35
@instance.msg(:an_arg)
37
@instance.rspec_verify
38
end.should_not raise_error
41
it "should ignore when expected message is not received" do
44
@instance.rspec_verify
45
end.should_not raise_error
48
it "should clear itself when verified" do
49
@instance.stub!(:this_should_go).and_return(:blah)
50
@instance.this_should_go.should == :blah
51
@instance.rspec_verify
53
@instance.this_should_go
54
end.should raise_error(NameError)
57
it "should return values in order to consecutive calls" do
58
return_values = ["1",2,Object.new]
59
@instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
60
@instance.msg.should == return_values[0]
61
@instance.msg.should == return_values[1]
62
@instance.msg.should == return_values[2]
65
it "should keep returning last value in consecutive calls" do
66
return_values = ["1",2,Object.new]
67
@instance.stub!(:msg).and_return(return_values[0],return_values[1],return_values[2])
68
@instance.msg.should == return_values[0]
69
@instance.msg.should == return_values[1]
70
@instance.msg.should == return_values[2]
71
@instance.msg.should == return_values[2]
72
@instance.msg.should == return_values[2]
75
it "should revert to original instance method if there is one" do
76
@instance.existing_instance_method.should equal(:original_value)
77
@instance.stub!(:existing_instance_method).and_return(:mock_value)
78
@instance.existing_instance_method.should equal(:mock_value)
79
@instance.rspec_verify
80
@instance.existing_instance_method.should equal(:original_value)
83
it "should revert to original class method if there is one" do
84
@class.existing_class_method.should equal(:original_value)
85
@class.stub!(:existing_class_method).and_return(:mock_value)
86
@class.existing_class_method.should equal(:mock_value)
88
@class.existing_class_method.should equal(:original_value)
91
it "should yield a specified object" do
92
@instance.stub!(:method_that_yields).and_yield(:yielded_obj)
93
current_value = :value_before
94
@instance.method_that_yields {|val| current_value = val}
95
current_value.should == :yielded_obj
96
@instance.rspec_verify
99
it "should yield multiple times with multiple calls to and_yield" do
100
@instance.stub!(:method_that_yields_multiple_times).and_yield(:yielded_value).
101
and_yield(:another_value)
103
@instance.method_that_yields_multiple_times {|val| current_value << val}
104
current_value.should == [:yielded_value, :another_value]
105
@instance.rspec_verify
108
it "should yield a specified object and return another specified object" do
109
yielded_obj = mock("my mock")
110
yielded_obj.should_receive(:foo).with(:bar)
111
@instance.stub!(:method_that_yields_and_returns).and_yield(yielded_obj).and_return(:baz)
112
@instance.method_that_yields_and_returns { |o| o.foo :bar }.should == :baz
115
it "should throw when told to" do
116
@mock.stub!(:something).and_throw(:up)
119
end.should throw_symbol(:up)
122
it "should override a pre-existing stub" do
123
@stub.stub!(:existing_instance_method).and_return(:updated_stub_value)
124
@stub.existing_instance_method.should == :updated_stub_value
127
it "should limit " do
128
@stub.stub!(:foo).with("bar")
129
@stub.should_receive(:foo).with("baz")
135
describe "A method stub with args" do
138
@stub.stub!(:foo).with("bar")
141
it "should not complain if not called" do
144
it "should not complain if called with arg" do
148
it "should complain if called with no arg" do
151
end.should raise_error
154
it "should complain if called with other arg" do
157
end.should raise_error
160
it "should not complain if also mocked w/ different args" do
161
@stub.should_receive(:foo).with("baz")
166
it "should complain if also mocked w/ different args AND called w/ a 3rd set of args" do
167
@stub.should_receive(:foo).with("baz")
172
end.should raise_error
175
it "should support options" do
176
@stub.stub!(:foo, :expected_from => "bar")