rspec_candy 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +8 -0
- data/README.md +7 -0
- data/Rakefile +18 -0
- data/lib/rspec_candy/helpers/disposable_copy.rb +16 -0
- data/lib/rspec_candy/helpers/it_should_act_like.rb +39 -0
- data/lib/rspec_candy/helpers/new_with_stubs.rb +16 -0
- data/lib/rspec_candy/helpers/rails/create_without_callbacks.rb +25 -0
- data/lib/rspec_candy/helpers/rails/it_should_run_callbacks.rb +111 -0
- data/lib/rspec_candy/helpers/rails/prevent_storage.rb +20 -0
- data/lib/rspec_candy/helpers/should_receive_and_execute.rb +38 -0
- data/lib/rspec_candy/helpers/should_receive_and_return.rb +17 -0
- data/lib/rspec_candy/helpers/should_receive_chain.rb +43 -0
- data/lib/rspec_candy/helpers/stub_any_instance.rb +25 -0
- data/lib/rspec_candy/helpers/stub_existing.rb +20 -0
- data/lib/rspec_candy/switcher.rb +44 -0
- data/lib/rspec_candy/version.rb +3 -0
- data/lib/rspec_candy.rb +16 -0
- data/rspec_candy.gemspec +19 -0
- data/spec/rspec1/Gemfile +13 -0
- data/spec/rspec1/Rakefile +11 -0
- data/spec/rspec1/app_root/config/boot.rb +114 -0
- data/spec/rspec1/app_root/config/database.yml +21 -0
- data/spec/rspec1/app_root/config/environment.rb +14 -0
- data/spec/rspec1/app_root/config/environments/in_memory.rb +0 -0
- data/spec/rspec1/app_root/config/environments/mysql.rb +0 -0
- data/spec/rspec1/app_root/config/environments/postgresql.rb +0 -0
- data/spec/rspec1/app_root/config/environments/sqlite.rb +0 -0
- data/spec/rspec1/app_root/config/environments/sqlite3.rb +0 -0
- data/spec/rspec1/app_root/config/initializers/state_machine.rb +1 -0
- data/spec/rspec1/app_root/config/routes.rb +4 -0
- data/spec/rspec1/app_root/log/.gitignore +1 -0
- data/spec/rspec1/rcov.opts +2 -0
- data/spec/rspec1/spec.opts +4 -0
- data/spec/rspec1/spec_helper.rb +24 -0
- data/spec/rspec2/.rspec +2 -0
- data/spec/rspec2/Gemfile +13 -0
- data/spec/rspec2/Rakefile +11 -0
- data/spec/rspec2/app_root/.gitignore +4 -0
- data/spec/rspec2/app_root/config/application.rb +32 -0
- data/spec/rspec2/app_root/config/boot.rb +13 -0
- data/spec/rspec2/app_root/config/database.yml +21 -0
- data/spec/rspec2/app_root/config/environment.rb +5 -0
- data/spec/rspec2/app_root/config/environments/in_memory.rb +0 -0
- data/spec/rspec2/app_root/config/environments/mysql.rb +0 -0
- data/spec/rspec2/app_root/config/environments/postgresql.rb +0 -0
- data/spec/rspec2/app_root/config/environments/sqlite.rb +0 -0
- data/spec/rspec2/app_root/config/environments/sqlite3.rb +0 -0
- data/spec/rspec2/app_root/config/environments/test.rb +35 -0
- data/spec/rspec2/app_root/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rspec2/app_root/config/initializers/inflections.rb +10 -0
- data/spec/rspec2/app_root/config/initializers/mime_types.rb +5 -0
- data/spec/rspec2/app_root/config/initializers/secret_token.rb +7 -0
- data/spec/rspec2/app_root/config/initializers/session_store.rb +8 -0
- data/spec/rspec2/app_root/config/initializers/state_machine.rb +1 -0
- data/spec/rspec2/app_root/config/locales/en.yml +5 -0
- data/spec/rspec2/app_root/config/routes.rb +58 -0
- data/spec/rspec2/app_root/log/.gitkeep +0 -0
- data/spec/rspec2/rcov.opts +2 -0
- data/spec/rspec2/spec_helper.rb +25 -0
- data/spec/shared/app_root/app/controllers/application_controller.rb +2 -0
- data/spec/shared/app_root/app/models/model.rb +19 -0
- data/spec/shared/app_root/app/models/state_machine_model.rb +30 -0
- data/spec/shared/app_root/config/initializers/state_machine.rb +1 -0
- data/spec/shared/app_root/db/migrate/001_create_model.rb +13 -0
- data/spec/shared/app_root/db/migrate/002_create_state_machine_model.rb +13 -0
- data/spec/shared/rspec_candy/helpers/disposable_copy_spec.rb +45 -0
- data/spec/shared/rspec_candy/helpers/it_should_act_like_spec.rb +139 -0
- data/spec/shared/rspec_candy/helpers/new_with_stubs_spec.rb +41 -0
- data/spec/shared/rspec_candy/helpers/rails/create_without_callbacks_spec.rb +41 -0
- data/spec/shared/rspec_candy/helpers/rails/it_should_run_callbacks_spec.rb +142 -0
- data/spec/shared/rspec_candy/helpers/rails/prevent_storage_spec.rb +85 -0
- data/spec/shared/rspec_candy/helpers/should_receive_and_execute_spec.rb +32 -0
- data/spec/shared/rspec_candy/helpers/should_receive_and_return_spec.rb +30 -0
- data/spec/shared/rspec_candy/helpers/should_receive_chain_spec.rb +99 -0
- data/spec/shared/rspec_candy/helpers/stub_any_instance_spec.rb +32 -0
- data/spec/shared/rspec_candy/helpers/stub_existing_spec.rb +27 -0
- data/spec/shared/support/matchers/pass_as_describe_block.rb +32 -0
- data/spec/shared/support/matchers/pass_as_example.rb +30 -0
- data/template/spec_candy.rails2.rb +171 -0
- data/template/spec_candy.rails3.rb +175 -0
- metadata +159 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::Rails::CreateWithoutCallbacks do
|
|
4
|
+
|
|
5
|
+
describe ActiveRecord::Base do
|
|
6
|
+
|
|
7
|
+
describe '.create_without_callbacks' do
|
|
8
|
+
|
|
9
|
+
it 'should create a record without running callbacks or validations' do
|
|
10
|
+
model = Model.disposable_copy do
|
|
11
|
+
before_save :crash
|
|
12
|
+
validate :crash
|
|
13
|
+
def crash
|
|
14
|
+
raise 'callback was run'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
record = nil
|
|
18
|
+
expect do
|
|
19
|
+
record = model.create_without_callbacks(:string_field => 'foo')
|
|
20
|
+
end.to_not raise_error
|
|
21
|
+
record.string_field.should == 'foo'
|
|
22
|
+
record.should be_a(Model)
|
|
23
|
+
record.id.should be_a(Fixnum)
|
|
24
|
+
record.should_not be_new_record
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe '.new_and_store' do
|
|
30
|
+
|
|
31
|
+
it 'should print a deprecation warning urging to use .create_without_callbacks instead' do
|
|
32
|
+
Model.should_receive(:warn).with(/Use create_without_callbacks instead/i)
|
|
33
|
+
Model.should_receive(:create_without_callbacks).with('args')
|
|
34
|
+
Model.new_and_store('args')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::Rails::ItShouldRunCallbacks do
|
|
4
|
+
|
|
5
|
+
describe '#it_should_run_callbacks' do
|
|
6
|
+
|
|
7
|
+
context 'for an app without state_machine' do
|
|
8
|
+
|
|
9
|
+
it 'should pass if all callbacks have been run' do
|
|
10
|
+
<<-describe_block.should pass_as_describe_block
|
|
11
|
+
describe Model, '#after_save' do
|
|
12
|
+
it_should_run_callbacks :after_save_callback2, :after_save_callback1
|
|
13
|
+
end
|
|
14
|
+
describe_block
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should only attempt to run the proper callbacks have been run' do
|
|
18
|
+
<<-describe_block.should fail_as_describe_block
|
|
19
|
+
describe Model, '#before_save' do
|
|
20
|
+
it_should_run_callbacks :after_save_callback2, :after_save_callback1
|
|
21
|
+
end
|
|
22
|
+
describe_block
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should not pass if a callback has not been run' do
|
|
26
|
+
<<-describe_block.should fail_as_describe_block
|
|
27
|
+
describe Model, '#after_create' do
|
|
28
|
+
it_should_run_callbacks :after_create_callback, :unknown_callback
|
|
29
|
+
end
|
|
30
|
+
describe_block
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'should not actually execute the callbacks' do
|
|
34
|
+
<<-describe_block.should pass_as_describe_block
|
|
35
|
+
def Model.after_save_callback2
|
|
36
|
+
raise "called!"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe Model, '#after_save' do
|
|
40
|
+
it_should_run_callbacks :after_save_callback1
|
|
41
|
+
end
|
|
42
|
+
describe_block
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should not parse state_machine callbacks being present' do
|
|
46
|
+
<<-describe_block.should fail_as_describe_block
|
|
47
|
+
describe StateMachineModel, '#event from :state1 to :state2' do
|
|
48
|
+
it_should_run_callbacks :event_callback
|
|
49
|
+
end
|
|
50
|
+
describe_block
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'for an app with state_machine' do
|
|
56
|
+
|
|
57
|
+
before do
|
|
58
|
+
ENV['REQUIRE_STATE_MACHINE'] = 'true'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
after do
|
|
62
|
+
ENV['REQUIRE_STATE_MACHINE'] = 'false'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'should pass if all callbacks have been run' do
|
|
66
|
+
<<-describe_block.should pass_as_describe_block
|
|
67
|
+
describe Model, '#after_save' do
|
|
68
|
+
it_should_run_callbacks :after_save_callback2, :after_save_callback1
|
|
69
|
+
end
|
|
70
|
+
describe_block
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should not pass if a callback has not been run' do
|
|
74
|
+
<<-describe_block.should fail_as_describe_block
|
|
75
|
+
describe Model, '#after_create' do
|
|
76
|
+
it_should_run_callbacks :after_create_callback, :unknown_callback
|
|
77
|
+
end
|
|
78
|
+
describe_block
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
it 'should also run state machine callbacks and pass if they are called if StateMachine is present' do
|
|
83
|
+
<<-describe_block.should pass_as_describe_block
|
|
84
|
+
describe StateMachineModel, '#event from :state1 to :state2' do
|
|
85
|
+
it_should_run_callbacks :event_callback
|
|
86
|
+
end
|
|
87
|
+
describe_block
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'should also run state machine callbacks and fail if they are not called if StateMachine is present' do
|
|
91
|
+
<<-describe_block.should fail_as_describe_block
|
|
92
|
+
describe StateMachineModel, '#event from :state1 to :state3' do
|
|
93
|
+
it_should_run_callbacks :event_callback
|
|
94
|
+
end
|
|
95
|
+
describe_block
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#it_should_run_callbacks_in_order' do
|
|
104
|
+
|
|
105
|
+
supported_callbacks = case RSpecCandy::Switcher.rspec_version
|
|
106
|
+
when :rspec1
|
|
107
|
+
%w[before after]
|
|
108
|
+
when :rspec2
|
|
109
|
+
%w[before after around]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
supported_callbacks.each do |kind|
|
|
113
|
+
|
|
114
|
+
it "should pass if all #{kind} callbacks are run in order" do
|
|
115
|
+
<<-describe_block.should pass_as_describe_block
|
|
116
|
+
describe Model, '##{kind}_save' do
|
|
117
|
+
it_should_run_callbacks_in_order :#{kind}_save_callback1, :#{kind}_save_callback2
|
|
118
|
+
end
|
|
119
|
+
describe_block
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should not pass if a #{kind} callback has not been run" do
|
|
123
|
+
<<-describe_block.should fail_as_describe_block
|
|
124
|
+
describe Model, '##{kind}_create' do
|
|
125
|
+
it_should_run_callbacks_in_order :#{kind}_create_callback, :unknown_callback
|
|
126
|
+
end
|
|
127
|
+
describe_block
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it "should not pass if #{kind} callbacks are run out of order" do
|
|
131
|
+
<<-describe_block.should fail_as_describe_block
|
|
132
|
+
describe Model, '##{kind}_save' do
|
|
133
|
+
it_should_run_callbacks_in_order :#{kind}_save_callback2, :#{kind}_save_callback1
|
|
134
|
+
end
|
|
135
|
+
describe_block
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::Rails::PreventStorage do
|
|
4
|
+
|
|
5
|
+
describe ActiveRecord::Base do
|
|
6
|
+
|
|
7
|
+
describe '#prevent_storage' do
|
|
8
|
+
|
|
9
|
+
context 'when attempting to save the record afterwards' do
|
|
10
|
+
|
|
11
|
+
it 'should run validations' do
|
|
12
|
+
klass = Model.disposable_copy do
|
|
13
|
+
validate :validation_method
|
|
14
|
+
end
|
|
15
|
+
record = klass.new
|
|
16
|
+
record.prevent_storage
|
|
17
|
+
record.should_receive :validation_method
|
|
18
|
+
record.save
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should run before_validate callbacks' do
|
|
22
|
+
klass = Model.disposable_copy do
|
|
23
|
+
before_validation :callback_method
|
|
24
|
+
end
|
|
25
|
+
record = klass.new
|
|
26
|
+
record.prevent_storage
|
|
27
|
+
record.should_receive :callback_method
|
|
28
|
+
record.save
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should run after_validate callbacks' do
|
|
32
|
+
klass = Model.disposable_copy do
|
|
33
|
+
after_validation :callback_method
|
|
34
|
+
end
|
|
35
|
+
record = klass.new
|
|
36
|
+
record.prevent_storage
|
|
37
|
+
record.should_receive :callback_method
|
|
38
|
+
record.save
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should prevent the record from being committed to the database' do
|
|
42
|
+
record = Model.new
|
|
43
|
+
record.prevent_storage
|
|
44
|
+
record.save.should be_false
|
|
45
|
+
Model.count.should be_zero
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it 'should not run before_save callbacks' do
|
|
49
|
+
klass = Model.disposable_copy do
|
|
50
|
+
before_save :callback_method
|
|
51
|
+
end
|
|
52
|
+
record = klass.new
|
|
53
|
+
record.prevent_storage
|
|
54
|
+
record.should_not_receive :callback_method
|
|
55
|
+
record.save
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should not run after_save callbacks' do
|
|
59
|
+
klass = Model.disposable_copy do
|
|
60
|
+
after_save :callback_method
|
|
61
|
+
end
|
|
62
|
+
record = klass.new
|
|
63
|
+
record.prevent_storage
|
|
64
|
+
record.should_not_receive :callback_method
|
|
65
|
+
record.save
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe '#keep_invalid!' do
|
|
73
|
+
|
|
74
|
+
it 'should print a deprecation warning asking to use #prevent_storage' do
|
|
75
|
+
record = Model.new
|
|
76
|
+
record.should_receive(:warn).with(/Use prevent_storage instead/i)
|
|
77
|
+
record.should_receive(:prevent_storage)
|
|
78
|
+
record.keep_invalid!
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::ShouldReceiveAndExecute do
|
|
4
|
+
|
|
5
|
+
describe Object do
|
|
6
|
+
|
|
7
|
+
describe '#should_receive_and_execute' do
|
|
8
|
+
|
|
9
|
+
it 'should not stub away the original method implementation' do
|
|
10
|
+
object = "object"
|
|
11
|
+
object.should_receive_and_execute(:size)
|
|
12
|
+
object.size.should == 6
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'should set an expectation that the given method are called' do
|
|
16
|
+
(<<-example).should fail_as_example
|
|
17
|
+
object = 'object'
|
|
18
|
+
object.should_receive_and_execute(:size)
|
|
19
|
+
example
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should return the expectation for further parameterization' do
|
|
23
|
+
object = 'object'
|
|
24
|
+
object.should_receive_and_execute(:size).class.name.should include('MessageExpectation')
|
|
25
|
+
object.size # make the example pass
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::StubExisting do
|
|
4
|
+
|
|
5
|
+
describe Object do
|
|
6
|
+
|
|
7
|
+
describe '#should_receive_and_return' do
|
|
8
|
+
|
|
9
|
+
it 'should stub out the given methods with the given return values' do
|
|
10
|
+
object = 'object'
|
|
11
|
+
object.should_receive_and_return(:foo => 'foo', :bar => 'bar')
|
|
12
|
+
object.foo.should == 'foo'
|
|
13
|
+
object.bar.should == 'bar'
|
|
14
|
+
object.size.should == 6 # object still responds to unstubbed methods
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should set expectations that all given methods are called' do
|
|
18
|
+
(<<-example).should fail_as_example
|
|
19
|
+
object = 'object'
|
|
20
|
+
object.should_receive_and_return(:foo => 'foo', :bar => 'bar')
|
|
21
|
+
object.foo
|
|
22
|
+
# but not object.bar
|
|
23
|
+
example
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::ShouldReceiveChain do
|
|
4
|
+
|
|
5
|
+
describe Object do
|
|
6
|
+
|
|
7
|
+
describe '#should_receive_chain' do
|
|
8
|
+
|
|
9
|
+
it "should pass when the chain was traversed completely" do
|
|
10
|
+
(<<-example).should pass_as_example
|
|
11
|
+
object = "object"
|
|
12
|
+
object.should_receive_chain(:first_message, :second_message)
|
|
13
|
+
object.first_message.second_message
|
|
14
|
+
example
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should fail when the chain wasn't traversed at all" do
|
|
18
|
+
(<<-example).should fail_as_example
|
|
19
|
+
object = "object"
|
|
20
|
+
object.should_receive_chain(:first_message, :second_message)
|
|
21
|
+
example
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should fail when the chain was only traversed partially" do
|
|
25
|
+
(<<-example).should fail_as_example
|
|
26
|
+
object = "object"
|
|
27
|
+
object.should_receive_chain(:first_message, :second_message)
|
|
28
|
+
object.first_message
|
|
29
|
+
example
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should allow to add argument expectations to inner chain links by using array notation" do
|
|
33
|
+
(<<-example).should pass_as_example
|
|
34
|
+
object = "object"
|
|
35
|
+
object.should_receive_chain([:first_message, 'argument'], :second_message)
|
|
36
|
+
object.first_message('argument').second_message
|
|
37
|
+
example
|
|
38
|
+
(<<-example).should fail_as_example
|
|
39
|
+
object = "object"
|
|
40
|
+
object.should_receive_chain([:first_message, 'argument'], :second_message)
|
|
41
|
+
object.first_message('wrong argument').second_message
|
|
42
|
+
example
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should allow to add argument expectations to the last chain link by using regular should_receive options" do
|
|
46
|
+
(<<-example).should pass_as_example
|
|
47
|
+
object = "object"
|
|
48
|
+
object.should_receive_chain(:first_message, :second_message).with('argument')
|
|
49
|
+
object.first_message.second_message('argument')
|
|
50
|
+
example
|
|
51
|
+
(<<-example).should fail_as_example
|
|
52
|
+
object = "object"
|
|
53
|
+
object.should_receive_chain(:first_message, :second_message).with('argument')
|
|
54
|
+
object.first_message.second_message('wrong argument')
|
|
55
|
+
example
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should allow inner chain links to be called more than once' do
|
|
59
|
+
(<<-example).should pass_as_example
|
|
60
|
+
object = "object"
|
|
61
|
+
object.should_receive_chain(:first_message, :second_message)
|
|
62
|
+
object.first_message
|
|
63
|
+
object.first_message.second_message
|
|
64
|
+
example
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
describe '#should_not_receive_chain' do
|
|
71
|
+
|
|
72
|
+
it "should fail when the chain was traversed completely" do
|
|
73
|
+
(<<-example).should fail_as_example
|
|
74
|
+
object = "object"
|
|
75
|
+
object.should_not_receive_chain(:first_message, :second_message)
|
|
76
|
+
object.first_message.second_message
|
|
77
|
+
example
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should pass when the chain wasn't traversed at all" do
|
|
81
|
+
(<<-example).should pass_as_example
|
|
82
|
+
object = "object"
|
|
83
|
+
object.should_not_receive_chain(:first_message, :second_message)
|
|
84
|
+
example
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should pass when the chain was only traversed partially" do
|
|
88
|
+
(<<-example).should pass_as_example
|
|
89
|
+
object = "object"
|
|
90
|
+
object.should_not_receive_chain(:first_message, :second_message)
|
|
91
|
+
object.first_message
|
|
92
|
+
example
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe RSpecCandy::Helpers::StubAnyInstance do
|
|
4
|
+
|
|
5
|
+
describe Class do
|
|
6
|
+
|
|
7
|
+
describe '#stub_any_instance' do
|
|
8
|
+
|
|
9
|
+
it 'should apply the given stubs to all future instances of that class' do
|
|
10
|
+
klass = Class.new {}
|
|
11
|
+
klass.stub_any_instance(:stubbed_method => 'result')
|
|
12
|
+
2.times do
|
|
13
|
+
klass.new.stubbed_method.should == 'result'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should not prevent initializer code to be run' do
|
|
18
|
+
klass = Class.new do
|
|
19
|
+
attr_reader :initializer_run
|
|
20
|
+
def initialize
|
|
21
|
+
@initializer_run = true
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
klass.stub_any_instance(:stubbed_method => 'result')
|
|
25
|
+
klass.new.initializer_run.should == true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|