rspec-mocks 2.12.1 → 2.12.2

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.
Files changed (56) hide show
  1. data/Changelog.md +17 -0
  2. data/lib/rspec/mocks.rb +8 -0
  3. data/lib/rspec/mocks/message_expectation.rb +6 -11
  4. data/lib/rspec/mocks/method_double.rb +19 -2
  5. data/lib/rspec/mocks/mutate_const.rb +1 -1
  6. data/lib/rspec/mocks/proxy.rb +1 -1
  7. data/lib/rspec/mocks/version.rb +1 -1
  8. data/lib/spec/mocks.rb +4 -0
  9. data/spec/rspec/mocks/and_call_original_spec.rb +22 -0
  10. data/spec/rspec/mocks/and_yield_spec.rb +7 -7
  11. data/spec/rspec/mocks/any_instance/message_chains_spec.rb +6 -6
  12. data/spec/rspec/mocks/any_instance_spec.rb +94 -94
  13. data/spec/rspec/mocks/any_number_of_times_spec.rb +2 -2
  14. data/spec/rspec/mocks/argument_expectation_spec.rb +3 -3
  15. data/spec/rspec/mocks/at_least_spec.rb +15 -15
  16. data/spec/rspec/mocks/at_most_spec.rb +7 -7
  17. data/spec/rspec/mocks/block_return_value_spec.rb +6 -6
  18. data/spec/rspec/mocks/bug_report_10260_spec.rb +1 -1
  19. data/spec/rspec/mocks/bug_report_10263_spec.rb +6 -4
  20. data/spec/rspec/mocks/bug_report_11545_spec.rb +1 -1
  21. data/spec/rspec/mocks/bug_report_600_spec.rb +1 -1
  22. data/spec/rspec/mocks/bug_report_7611_spec.rb +1 -1
  23. data/spec/rspec/mocks/bug_report_8165_spec.rb +4 -4
  24. data/spec/rspec/mocks/bug_report_830_spec.rb +2 -2
  25. data/spec/rspec/mocks/bug_report_957_spec.rb +2 -2
  26. data/spec/rspec/mocks/configuration_spec.rb +4 -4
  27. data/spec/rspec/mocks/double_spec.rb +1 -1
  28. data/spec/rspec/mocks/failing_argument_matchers_spec.rb +1 -1
  29. data/spec/rspec/mocks/hash_excluding_matcher_spec.rb +13 -13
  30. data/spec/rspec/mocks/hash_including_matcher_spec.rb +30 -30
  31. data/spec/rspec/mocks/mock_ordering_spec.rb +8 -8
  32. data/spec/rspec/mocks/mock_space_spec.rb +4 -4
  33. data/spec/rspec/mocks/mock_spec.rb +94 -90
  34. data/spec/rspec/mocks/multiple_return_value_spec.rb +21 -21
  35. data/spec/rspec/mocks/mutate_const_spec.rb +112 -102
  36. data/spec/rspec/mocks/nil_expectation_warning_spec.rb +6 -12
  37. data/spec/rspec/mocks/null_object_mock_spec.rb +12 -12
  38. data/spec/rspec/mocks/once_counts_spec.rb +7 -7
  39. data/spec/rspec/mocks/options_hash_spec.rb +6 -6
  40. data/spec/rspec/mocks/partial_mock_spec.rb +15 -15
  41. data/spec/rspec/mocks/partial_mock_using_mocks_directly_spec.rb +17 -17
  42. data/spec/rspec/mocks/passing_argument_matchers_spec.rb +6 -6
  43. data/spec/rspec/mocks/precise_counts_spec.rb +7 -7
  44. data/spec/rspec/mocks/record_messages_spec.rb +4 -4
  45. data/spec/rspec/mocks/serialization_spec.rb +3 -3
  46. data/spec/rspec/mocks/stash_spec.rb +1 -1
  47. data/spec/rspec/mocks/stub_chain_spec.rb +22 -22
  48. data/spec/rspec/mocks/stub_implementation_spec.rb +10 -10
  49. data/spec/rspec/mocks/stub_spec.rb +50 -31
  50. data/spec/rspec/mocks/stubbed_message_expectations_spec.rb +3 -3
  51. data/spec/rspec/mocks/test_double_spec.rb +3 -3
  52. data/spec/rspec/mocks/to_ary_spec.rb +7 -7
  53. data/spec/rspec/mocks/twice_counts_spec.rb +8 -8
  54. data/spec/rspec/mocks_spec.rb +13 -4
  55. data/spec/spec_helper.rb +4 -0
  56. metadata +5 -5
@@ -1,3 +1,18 @@
1
+ ### 2.12.2 / 2013-01-27
2
+ [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.12.1...v.2.12.2)
3
+
4
+ Bug fixes
5
+
6
+ * Fix `and_call_original` to work properly for methods defined
7
+ on a module extended onto an object instance (Myron Marston).
8
+ * Fix `stub_const` with an undefined constnat name to work properly
9
+ with constant strings that are prefixed with `::` -- and edge case
10
+ I missed in the bug fix in the 2.12.1 release (Myron Marston).
11
+ * Ensure method visibility on a partial mock is restored after reseting
12
+ method stubs, even on a singleton module (created via `extend self`)
13
+ when the method visibility differs between the instance and singleton
14
+ versions (Andy Lindeman).
15
+
1
16
  ### 2.12.1 / 2012-12-21
2
17
  [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.12.0...v2.12.1)
3
18
 
@@ -7,6 +22,8 @@ Bug fixes
7
22
  (Myron Marston)
8
23
  * Properly restore stubbed aliased methods on rubies
9
24
  that report the incorrect owner (Myron Marston and Andy Lindeman).
25
+ * Fix `hide_const` and `stub_const` with a defined constnat name to
26
+ work properly with constant strings that are prefixed with `::` (Myron Marston).
10
27
 
11
28
  ### 2.12.0 / 2012-11-12
12
29
  [full changelog](http://github.com/rspec/rspec-mocks/compare/v2.11.3...v2.12.0)
@@ -27,6 +27,14 @@ module RSpec
27
27
  @configuration ||= Configuration.new
28
28
  end
29
29
 
30
+ # @api private
31
+ # Used internally by RSpec to display custom deprecation warnings. This
32
+ # is also defined in rspec-core, but we can't assume it's loaded since
33
+ # rspec-expectations should be usable w/o rspec-core.
34
+ def warn_deprecation(message)
35
+ warn(message)
36
+ end
37
+
30
38
  private
31
39
 
32
40
  def add_extensions
@@ -20,8 +20,6 @@ module RSpec
20
20
  @expected_received_count = expected_received_count
21
21
  @argument_list_matcher = ArgumentListMatcher.new(ArgumentMatchers::AnyArgsMatcher.new)
22
22
  @consecutive = false
23
- @exception_to_raise = nil
24
- @args_to_throw = []
25
23
  @order_group = expectation_ordering
26
24
  @at_least = @at_most = @exactly = nil
27
25
  @args_to_yield = []
@@ -141,10 +139,10 @@ module RSpec
141
139
  # car.stub(:go).and_raise(OutOfGas.new(2, :oz))
142
140
  def and_raise(exception = RuntimeError, message = nil)
143
141
  if exception.respond_to?(:exception)
144
- @exception_to_raise = message ? exception.exception(message) : exception.exception
145
- else
146
- @exception_to_raise = exception
142
+ exception = message ? exception.exception(message) : exception.exception
147
143
  end
144
+
145
+ self.implementation = Proc.new { raise exception }
148
146
  end
149
147
 
150
148
  # @overload and_throw(symbol)
@@ -157,8 +155,8 @@ module RSpec
157
155
  #
158
156
  # car.stub(:go).and_throw(:out_of_gas)
159
157
  # car.stub(:go).and_throw(:out_of_gas, :level => 0.1)
160
- def and_throw(symbol, object = nil)
161
- @args_to_throw = [symbol, object].compact
158
+ def and_throw(*args)
159
+ self.implementation = Proc.new { throw *args }
162
160
  end
163
161
 
164
162
  # Tells the object to yield one or more args to a block when the message
@@ -195,9 +193,6 @@ module RSpec
195
193
  @order_group.handle_order_constraint self
196
194
 
197
195
  begin
198
- raise(@exception_to_raise) unless @exception_to_raise.nil?
199
- Kernel::throw(*@args_to_throw) unless @args_to_throw.empty?
200
-
201
196
  default_return_val = call_with_yield(&block) if !@args_to_yield.empty? || @eval_context
202
197
 
203
198
  if @consecutive
@@ -493,7 +488,7 @@ module RSpec
493
488
  def and_return(*)
494
489
  # no-op
495
490
  # @deprecated and_return is not supported with negative message expectations.
496
- RSpec.warn_deprecation <<-MSG
491
+ RSpec::Mocks.warn_deprecation <<-MSG
497
492
 
498
493
  DEPRECATION: `and_return` with `should_not_receive` is deprecated. Called from #{caller(0)[1]}
499
494
  MSG
@@ -56,8 +56,8 @@ module RSpec
56
56
  meth
57
57
  else
58
58
  begin
59
- # Example: an instance method defined on @object's class.
60
- @object.class.instance_method(@method_name).bind(@object)
59
+ # Example: an instance method defined on one of @object's ancestors.
60
+ original_method_from_ancestor(object_singleton_class.ancestors)
61
61
  rescue NameError
62
62
  raise unless @object.respond_to?(:superclass)
63
63
 
@@ -97,6 +97,14 @@ module RSpec
97
97
  any_instance_class_recorder_observing_method?(superklass)
98
98
  end
99
99
 
100
+ def original_method_from_ancestor(ancestors)
101
+ klass, *rest = ancestors
102
+ klass.instance_method(@method_name).bind(@object)
103
+ rescue NameError
104
+ raise if rest.empty?
105
+ original_method_from_ancestor(rest)
106
+ end
107
+
100
108
  if RUBY_VERSION.to_f > 1.8
101
109
  # @private
102
110
  def original_method_from_superclass
@@ -145,6 +153,7 @@ module RSpec
145
153
  def configure_method
146
154
  RSpec::Mocks::space.add(@object) if RSpec::Mocks::space
147
155
  warn_if_nil_class
156
+ @original_visibility = visibility_for_method
148
157
  @method_stasher.stash unless @method_is_proxied
149
158
  define_proxy_method
150
159
  end
@@ -173,9 +182,17 @@ module RSpec
173
182
 
174
183
  object_singleton_class.__send__(:remove_method, @method_name)
175
184
  @method_stasher.restore
185
+ restore_original_visibility
186
+
176
187
  @method_is_proxied = false
177
188
  end
178
189
 
190
+ # @private
191
+ def restore_original_visibility
192
+ return unless object_singleton_class.method_defined?(@method_name) || object_singleton_class.private_method_defined?(@method_name)
193
+ object_singleton_class.class_eval(@original_visibility, __FILE__, __LINE__)
194
+ end
195
+
179
196
  # @private
180
197
  def verify
181
198
  expectations.each {|e| e.verify_messages_received}
@@ -199,7 +199,7 @@ module RSpec
199
199
  attr_reader :original_value, :full_constant_name
200
200
 
201
201
  def initialize(full_constant_name, mutated_value, transfer_nested_constants)
202
- @full_constant_name = full_constant_name
202
+ @full_constant_name = normalize_const_name(full_constant_name)
203
203
  @mutated_value = mutated_value
204
204
  @transfer_nested_constants = transfer_nested_constants
205
205
  @context_parts = @full_constant_name.split('::')
@@ -64,7 +64,7 @@ module RSpec
64
64
  end
65
65
 
66
66
  # @private
67
- def add_message_expectation(location, method_name, opts={}, &block)
67
+ def add_message_expectation(location, method_name, opts={}, &block)
68
68
  meth_double = method_double[method_name]
69
69
 
70
70
  if null_object? && !block
@@ -1,7 +1,7 @@
1
1
  module RSpec
2
2
  module Mocks
3
3
  module Version
4
- STRING = '2.12.1'
4
+ STRING = '2.12.2'
5
5
  end
6
6
  end
7
7
  end
@@ -1,2 +1,6 @@
1
1
  # For backward compatibility with rspec-1
2
2
  require 'rspec/mocks'
3
+
4
+ RSpec::Mocks.warn_deprecation "\nDEPRECATION: `require 'spec/mocks' " +
5
+ " is deprecated. Please require 'rspec/mocks' instead."
6
+
@@ -37,6 +37,28 @@ describe "and_call_original" do
37
37
  expect(instance.foo).to eq(:bar)
38
38
  end
39
39
 
40
+ it 'works for methods added through an extended module' do
41
+ instance.extend Module.new { def foo; :bar; end }
42
+ instance.should_receive(:foo).and_call_original
43
+ expect(instance.foo).to eq(:bar)
44
+ end
45
+
46
+ it "works for method added through an extended module onto a class's ancestor" do
47
+ sub_sub_klass = Class.new(Class.new(klass))
48
+ klass.extend Module.new { def foo; :bar; end }
49
+ sub_sub_klass.should_receive(:foo).and_call_original
50
+ expect(sub_sub_klass.foo).to eq(:bar)
51
+ end
52
+
53
+ it "finds the method on the most direct ancestor even if the method " +
54
+ "is available on more distant ancestors" do
55
+ klass.extend Module.new { def foo; :klass_bar; end }
56
+ sub_klass = Class.new(klass)
57
+ sub_klass.extend Module.new { def foo; :sub_klass_bar; end }
58
+ sub_klass.should_receive(:foo).and_call_original
59
+ expect(sub_klass.foo).to eq(:sub_klass_bar)
60
+ end
61
+
40
62
  context 'when using any_instance' do
41
63
  it 'works for instance methods defined on the class' do
42
64
  klass.any_instance.should_receive(:meth_1).and_call_original
@@ -6,18 +6,18 @@ describe RSpec::Mocks::Mock do
6
6
 
7
7
  describe "#and_yield" do
8
8
  context "with eval context as block argument" do
9
-
9
+
10
10
  it "evaluates the supplied block as it is read" do
11
11
  evaluated = false
12
12
  obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
13
13
  evaluated = true
14
14
  end
15
- evaluated.should be_true
15
+ expect(evaluated).to be_true
16
16
  end
17
17
 
18
18
  it "passes an eval context object to the supplied block" do
19
19
  obj.stub(:method_that_accepts_a_block).and_yield do |eval_context|
20
- eval_context.should_not be_nil
20
+ expect(eval_context).not_to be_nil
21
21
  end
22
22
  end
23
23
 
@@ -33,7 +33,7 @@ describe RSpec::Mocks::Mock do
33
33
  actual_eval_context = self
34
34
  end
35
35
 
36
- actual_eval_context.should equal(expected_eval_context)
36
+ expect(actual_eval_context).to equal(expected_eval_context)
37
37
  end
38
38
 
39
39
  context "and no yielded arguments" do
@@ -63,7 +63,7 @@ describe RSpec::Mocks::Mock do
63
63
  # foo is not called here
64
64
  end
65
65
 
66
- lambda {configured_eval_context.rspec_verify}.should raise_error(RSpec::Mocks::MockExpectationError)
66
+ expect { configured_eval_context.rspec_verify }.to raise_error(RSpec::Mocks::MockExpectationError)
67
67
  end
68
68
 
69
69
  end
@@ -102,8 +102,8 @@ describe RSpec::Mocks::Mock do
102
102
  # foo is not called here
103
103
  end
104
104
 
105
- lambda {configured_eval_context.rspec_verify}.should raise_error(RSpec::Mocks::MockExpectationError)
106
- lambda {yielded_arg.rspec_verify}.should raise_error(RSpec::Mocks::MockExpectationError)
105
+ expect { configured_eval_context.rspec_verify }.to raise_error(RSpec::Mocks::MockExpectationError)
106
+ expect { yielded_arg.rspec_verify }.to raise_error(RSpec::Mocks::MockExpectationError)
107
107
  end
108
108
 
109
109
  end
@@ -7,13 +7,13 @@ describe RSpec::Mocks::AnyInstance::MessageChains do
7
7
 
8
8
  it "knows if a method does not have an expectation set on it" do
9
9
  chains.add(:method_name, stub_chain)
10
- chains.has_expectation?(:method_name).should be_false
10
+ expect(chains.has_expectation?(:method_name)).to be_false
11
11
  end
12
12
 
13
13
  it "knows if a method has an expectation set on it" do
14
14
  chains.add(:method_name, stub_chain)
15
15
  chains.add(:method_name, expectation_chain)
16
- chains.has_expectation?(:method_name).should be_true
16
+ expect(chains.has_expectation?(:method_name)).to be_true
17
17
  end
18
18
 
19
19
  it "can remove all stub chains" do
@@ -22,19 +22,19 @@ describe RSpec::Mocks::AnyInstance::MessageChains do
22
22
  chains.add(:method_name, RSpec::Mocks::AnyInstance::StubChain.new)
23
23
 
24
24
  chains.remove_stub_chains_for!(:method_name)
25
- chains[:method_name].should eq([expectation_chain])
25
+ expect(chains[:method_name]).to eq([expectation_chain])
26
26
  end
27
-
27
+
28
28
  context "creating stub chains" do
29
29
  it "understands how to add a stub chain for a method" do
30
30
  chains.add(:method_name, stub_chain)
31
- chains[:method_name].should eq([stub_chain])
31
+ expect(chains[:method_name]).to eq([stub_chain])
32
32
  end
33
33
 
34
34
  it "allows multiple stub chains for a method" do
35
35
  chains.add(:method_name, stub_chain)
36
36
  chains.add(:method_name, another_stub_chain = RSpec::Mocks::AnyInstance::StubChain.new)
37
- chains[:method_name].should eq([stub_chain, another_stub_chain])
37
+ expect(chains[:method_name]).to eq([stub_chain, another_stub_chain])
38
38
  end
39
39
  end
40
40
  end
@@ -19,41 +19,41 @@ module RSpec
19
19
  context "invocation order" do
20
20
  context "#stub" do
21
21
  it "raises an error if 'stub' follows 'with'" do
22
- lambda{ klass.any_instance.with("1").stub(:foo) }.should raise_error(NoMethodError)
22
+ expect { klass.any_instance.with("1").stub(:foo) }.to raise_error(NoMethodError)
23
23
  end
24
24
 
25
25
  it "raises an error if 'with' follows 'and_return'" do
26
- lambda{ klass.any_instance.stub(:foo).and_return(1).with("1") }.should raise_error(NoMethodError)
26
+ expect { klass.any_instance.stub(:foo).and_return(1).with("1") }.to raise_error(NoMethodError)
27
27
  end
28
28
 
29
29
  it "raises an error if 'with' follows 'and_raise'" do
30
- lambda{ klass.any_instance.stub(:foo).and_raise(1).with("1") }.should raise_error(NoMethodError)
30
+ expect { klass.any_instance.stub(:foo).and_raise(1).with("1") }.to raise_error(NoMethodError)
31
31
  end
32
32
 
33
33
  it "raises an error if 'with' follows 'and_yield'" do
34
- lambda{ klass.any_instance.stub(:foo).and_yield(1).with("1") }.should raise_error(NoMethodError)
34
+ expect { klass.any_instance.stub(:foo).and_yield(1).with("1") }.to raise_error(NoMethodError)
35
35
  end
36
36
  end
37
37
 
38
38
  context "#stub_chain" do
39
39
  it "raises an error if 'stub_chain' follows 'any_instance'" do
40
- lambda{ klass.any_instance.and_return("1").stub_chain(:foo, :bar) }.should raise_error(NoMethodError)
40
+ expect { klass.any_instance.and_return("1").stub_chain(:foo, :bar) }.to raise_error(NoMethodError)
41
41
  end
42
42
  end
43
43
 
44
44
  context "#should_receive" do
45
45
  it "raises an error if 'should_receive' follows 'with'" do
46
- lambda{ klass.any_instance.with("1").should_receive(:foo) }.should raise_error(NoMethodError)
46
+ expect { klass.any_instance.with("1").should_receive(:foo) }.to raise_error(NoMethodError)
47
47
  end
48
48
 
49
49
  it "raises an error if 'with' follows 'and_return'" do
50
50
  pending "see Github issue #42"
51
- lambda{ klass.any_instance.should_receive(:foo).and_return(1).with("1") }.should raise_error(NoMethodError)
51
+ expect { klass.any_instance.should_receive(:foo).and_return(1).with("1") }.to raise_error(NoMethodError)
52
52
  end
53
53
 
54
54
  it "raises an error if 'with' follows 'and_raise'" do
55
55
  pending "see Github issue #42"
56
- lambda{ klass.any_instance.should_receive(:foo).and_raise(1).with("1") }.should raise_error(NoMethodError)
56
+ expect { klass.any_instance.should_receive(:foo).and_raise(1).with("1") }.to raise_error(NoMethodError)
57
57
  end
58
58
  end
59
59
  end
@@ -61,36 +61,36 @@ module RSpec
61
61
  context "with #stub" do
62
62
  it "does not suppress an exception when a method that doesn't exist is invoked" do
63
63
  klass.any_instance.stub(:foo)
64
- lambda{ klass.new.bar }.should raise_error(NoMethodError)
64
+ expect { klass.new.bar }.to raise_error(NoMethodError)
65
65
  end
66
66
 
67
67
  context 'multiple methods' do
68
68
  it "allows multiple methods to be stubbed in a single invocation" do
69
69
  klass.any_instance.stub(:foo => 'foo', :bar => 'bar')
70
70
  instance = klass.new
71
- instance.foo.should eq('foo')
72
- instance.bar.should eq('bar')
71
+ expect(instance.foo).to eq('foo')
72
+ expect(instance.bar).to eq('bar')
73
73
  end
74
74
 
75
75
  it "adheres to the contract of multiple method stubbing withou any instance" do
76
- Object.new.stub(:foo => 'foo', :bar => 'bar').should eq(:foo => 'foo', :bar => 'bar')
77
- klass.any_instance.stub(:foo => 'foo', :bar => 'bar').should eq(:foo => 'foo', :bar => 'bar')
76
+ expect(Object.new.stub(:foo => 'foo', :bar => 'bar')).to eq(:foo => 'foo', :bar => 'bar')
77
+ expect(klass.any_instance.stub(:foo => 'foo', :bar => 'bar')).to eq(:foo => 'foo', :bar => 'bar')
78
78
  end
79
79
 
80
80
  context "allows a chain of methods to be stubbed using #stub_chain" do
81
81
  it "given symbols representing the methods" do
82
82
  klass.any_instance.stub_chain(:one, :two, :three).and_return(:four)
83
- klass.new.one.two.three.should eq(:four)
83
+ expect(klass.new.one.two.three).to eq(:four)
84
84
  end
85
85
 
86
86
  it "given a hash as the last argument uses the value as the expected return value" do
87
87
  klass.any_instance.stub_chain(:one, :two, :three => :four)
88
- klass.new.one.two.three.should eq(:four)
88
+ expect(klass.new.one.two.three).to eq(:four)
89
89
  end
90
90
 
91
91
  it "given a string of '.' separated method names representing the chain" do
92
92
  klass.any_instance.stub_chain('one.two.three').and_return(:four)
93
- klass.new.one.two.three.should eq(:four)
93
+ expect(klass.new.one.two.three).to eq(:four)
94
94
  end
95
95
  end
96
96
  end
@@ -98,14 +98,14 @@ module RSpec
98
98
  context "behaves as 'every instance'" do
99
99
  it "stubs every instance in the spec" do
100
100
  klass.any_instance.stub(:foo).and_return(result = Object.new)
101
- klass.new.foo.should eq(result)
102
- klass.new.foo.should eq(result)
101
+ expect(klass.new.foo).to eq(result)
102
+ expect(klass.new.foo).to eq(result)
103
103
  end
104
104
 
105
105
  it "stubs instance created before any_instance was called" do
106
106
  instance = klass.new
107
107
  klass.any_instance.stub(:foo).and_return(result = Object.new)
108
- instance.foo.should eq(result)
108
+ expect(instance.foo).to eq(result)
109
109
  end
110
110
  end
111
111
 
@@ -117,8 +117,8 @@ module RSpec
117
117
 
118
118
  it "returns the stubbed value when arguments match" do
119
119
  instance = klass.new
120
- instance.foo(:param_one, :param_two).should eq(:result_one)
121
- instance.foo(:param_three, :param_four).should eq(:result_two)
120
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
121
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
122
122
  end
123
123
 
124
124
  it "fails the spec with an expectation error when the arguments do not match" do
@@ -136,32 +136,32 @@ module RSpec
136
136
 
137
137
  it "stubs a method" do
138
138
  instance = klass.new
139
- instance.foo.should eq(1)
140
- instance.bar.should eq(2)
139
+ expect(instance.foo).to eq(1)
140
+ expect(instance.bar).to eq(2)
141
141
  end
142
142
 
143
143
  it "returns the same value for calls on different instances" do
144
- klass.new.foo.should eq(klass.new.foo)
145
- klass.new.bar.should eq(klass.new.bar)
144
+ expect(klass.new.foo).to eq(klass.new.foo)
145
+ expect(klass.new.bar).to eq(klass.new.bar)
146
146
  end
147
147
  end
148
148
 
149
149
  context "with #and_return" do
150
150
  it "stubs a method that doesn't exist" do
151
151
  klass.any_instance.stub(:foo).and_return(1)
152
- klass.new.foo.should eq(1)
152
+ expect(klass.new.foo).to eq(1)
153
153
  end
154
154
 
155
155
  it "stubs a method that exists" do
156
156
  klass.any_instance.stub(:existing_method).and_return(1)
157
- klass.new.existing_method.should eq(1)
157
+ expect(klass.new.existing_method).to eq(1)
158
158
  end
159
159
 
160
160
  it "returns the same object for calls on different instances" do
161
161
  return_value = Object.new
162
162
  klass.any_instance.stub(:foo).and_return(return_value)
163
- klass.new.foo.should be(return_value)
164
- klass.new.foo.should be(return_value)
163
+ expect(klass.new.foo).to be(return_value)
164
+ expect(klass.new.foo).to be(return_value)
165
165
  end
166
166
  end
167
167
 
@@ -169,70 +169,70 @@ module RSpec
169
169
  it "yields the value specified" do
170
170
  yielded_value = Object.new
171
171
  klass.any_instance.stub(:foo).and_yield(yielded_value)
172
- klass.new.foo{|value| value.should be(yielded_value)}
172
+ klass.new.foo{|value| expect(value).to be(yielded_value)}
173
173
  end
174
174
  end
175
175
 
176
176
  context "with #and_raise" do
177
177
  it "stubs a method that doesn't exist" do
178
178
  klass.any_instance.stub(:foo).and_raise(CustomErrorForAnyInstanceSpec)
179
- lambda{ klass.new.foo}.should raise_error(CustomErrorForAnyInstanceSpec)
179
+ expect { klass.new.foo}.to raise_error(CustomErrorForAnyInstanceSpec)
180
180
  end
181
181
 
182
182
  it "stubs a method that exists" do
183
183
  klass.any_instance.stub(:existing_method).and_raise(CustomErrorForAnyInstanceSpec)
184
- lambda{ klass.new.existing_method}.should raise_error(CustomErrorForAnyInstanceSpec)
184
+ expect { klass.new.existing_method}.to raise_error(CustomErrorForAnyInstanceSpec)
185
185
  end
186
186
  end
187
187
 
188
188
  context "with a block" do
189
189
  it "stubs a method" do
190
190
  klass.any_instance.stub(:foo) { 1 }
191
- klass.new.foo.should eq(1)
191
+ expect(klass.new.foo).to eq(1)
192
192
  end
193
193
 
194
194
  it "returns the same computed value for calls on different instances" do
195
195
  klass.any_instance.stub(:foo) { 1 + 2 }
196
- klass.new.foo.should eq(klass.new.foo)
196
+ expect(klass.new.foo).to eq(klass.new.foo)
197
197
  end
198
198
  end
199
199
 
200
200
  context "core ruby objects" do
201
201
  it "works uniformly across *everything*" do
202
202
  Object.any_instance.stub(:foo).and_return(1)
203
- Object.new.foo.should eq(1)
203
+ expect(Object.new.foo).to eq(1)
204
204
  end
205
205
 
206
206
  it "works with the non-standard constructor []" do
207
207
  Array.any_instance.stub(:foo).and_return(1)
208
- [].foo.should eq(1)
208
+ expect([].foo).to eq(1)
209
209
  end
210
210
 
211
211
  it "works with the non-standard constructor {}" do
212
212
  Hash.any_instance.stub(:foo).and_return(1)
213
- {}.foo.should eq(1)
213
+ expect({}.foo).to eq(1)
214
214
  end
215
215
 
216
216
  it "works with the non-standard constructor \"\"" do
217
217
  String.any_instance.stub(:foo).and_return(1)
218
- "".foo.should eq(1)
218
+ expect("".foo).to eq(1)
219
219
  end
220
220
 
221
221
  it "works with the non-standard constructor \'\'" do
222
222
  String.any_instance.stub(:foo).and_return(1)
223
- ''.foo.should eq(1)
223
+ expect(''.foo).to eq(1)
224
224
  end
225
225
 
226
226
  it "works with the non-standard constructor module" do
227
227
  Module.any_instance.stub(:foo).and_return(1)
228
228
  module RSpec::SampleRspecTestModule;end
229
- RSpec::SampleRspecTestModule.foo.should eq(1)
229
+ expect(RSpec::SampleRspecTestModule.foo).to eq(1)
230
230
  end
231
231
 
232
232
  it "works with the non-standard constructor class" do
233
233
  Class.any_instance.stub(:foo).and_return(1)
234
234
  class RSpec::SampleRspecTestClass;end
235
- RSpec::SampleRspecTestClass.foo.should eq(1)
235
+ expect(RSpec::SampleRspecTestClass.foo).to eq(1)
236
236
  end
237
237
  end
238
238
  end
@@ -249,14 +249,14 @@ module RSpec
249
249
  it "replaces the stubbed method with the original method" do
250
250
  klass.any_instance.stub(:existing_method)
251
251
  klass.any_instance.unstub(:existing_method)
252
- klass.new.existing_method.should eq(:existing_method_return_value)
252
+ expect(klass.new.existing_method).to eq(:existing_method_return_value)
253
253
  end
254
254
 
255
255
  it "removes all stubs with the supplied method name" do
256
256
  klass.any_instance.stub(:existing_method).with(1)
257
257
  klass.any_instance.stub(:existing_method).with(2)
258
258
  klass.any_instance.unstub(:existing_method)
259
- klass.new.existing_method.should eq(:existing_method_return_value)
259
+ expect(klass.new.existing_method).to eq(:existing_method_return_value)
260
260
  end
261
261
 
262
262
  it "does not remove any expectations with the same method name" do
@@ -264,42 +264,42 @@ module RSpec
264
264
  klass.any_instance.stub(:existing_method_with_arguments).with(1)
265
265
  klass.any_instance.stub(:existing_method_with_arguments).with(2)
266
266
  klass.any_instance.unstub(:existing_method_with_arguments)
267
- klass.new.existing_method_with_arguments(3).should eq(:three)
267
+ expect(klass.new.existing_method_with_arguments(3)).to eq(:three)
268
268
  end
269
269
 
270
270
  it "raises a MockExpectationError if the method has not been stubbed" do
271
- lambda do
271
+ expect {
272
272
  klass.any_instance.unstub(:existing_method)
273
- end.should raise_error(RSpec::Mocks::MockExpectationError, 'The method `existing_method` was not stubbed or was already unstubbed')
273
+ }.to raise_error(RSpec::Mocks::MockExpectationError, 'The method `existing_method` was not stubbed or was already unstubbed')
274
274
  end
275
275
  end
276
276
 
277
277
  context "with #should_not_receive" do
278
278
  it "fails if the method is called" do
279
279
  klass.any_instance.should_not_receive(:existing_method)
280
- lambda { klass.new.existing_method }.should raise_error(RSpec::Mocks::MockExpectationError)
280
+ expect { klass.new.existing_method }.to raise_error(RSpec::Mocks::MockExpectationError)
281
281
  end
282
282
 
283
283
  it "passes if no method is called" do
284
- lambda { klass.any_instance.should_not_receive(:existing_method) }.should_not raise_error
284
+ expect { klass.any_instance.should_not_receive(:existing_method) }.to_not raise_error
285
285
  end
286
286
 
287
287
  it "passes if only a different method is called" do
288
288
  klass.any_instance.should_not_receive(:existing_method)
289
- lambda { klass.new.another_existing_method }.should_not raise_error
289
+ expect { klass.new.another_existing_method }.to_not raise_error
290
290
  end
291
291
 
292
292
  context "with constraints" do
293
293
  it "fails if the method is called with the specified parameters" do
294
294
  klass.any_instance.should_not_receive(:existing_method_with_arguments).with(:argument_one, :argument_two)
295
- lambda do
295
+ expect {
296
296
  klass.new.existing_method_with_arguments(:argument_one, :argument_two)
297
- end.should raise_error(RSpec::Mocks::MockExpectationError)
297
+ }.to raise_error(RSpec::Mocks::MockExpectationError)
298
298
  end
299
299
 
300
300
  it "passes if the method is called with different parameters" do
301
301
  klass.any_instance.should_not_receive(:existing_method_with_arguments).with(:argument_one, :argument_two)
302
- lambda { klass.new.existing_method_with_arguments(:argument_three, :argument_four) }.should_not raise_error
302
+ expect { klass.new.existing_method_with_arguments(:argument_three, :argument_four) }.to_not raise_error
303
303
  end
304
304
  end
305
305
  end
@@ -311,7 +311,7 @@ module RSpec
311
311
  context "with an expectation is set on a method which does not exist" do
312
312
  it "returns the expected value" do
313
313
  klass.any_instance.should_receive(:foo).and_return(1)
314
- klass.new.foo(1).should eq(1)
314
+ expect(klass.new.foo(1)).to eq(1)
315
315
  end
316
316
 
317
317
  it "fails if an instance is created but no invocation occurs" do
@@ -343,7 +343,7 @@ module RSpec
343
343
 
344
344
  instance = klass.new
345
345
  instance.should_receive(:foo).and_return(result = Object.new)
346
- instance.foo.should eq(result)
346
+ expect(instance.foo).to eq(result)
347
347
  end
348
348
 
349
349
  context "behaves as 'exactly one instance'" do
@@ -373,7 +373,7 @@ module RSpec
373
373
  klass.new.foo
374
374
  klass.rspec_verify
375
375
  end.to(raise_error(RSpec::Mocks::MockExpectationError) do |error|
376
- error.message.should_not eq(existing_method_expectation_error_message)
376
+ expect(error.message).not_to eq(existing_method_expectation_error_message)
377
377
  end)
378
378
  end
379
379
 
@@ -382,7 +382,7 @@ module RSpec
382
382
  klass.any_instance.should_receive(:foo)
383
383
  klass.should_receive(:woot).and_return(result = Object.new)
384
384
  klass.new.foo
385
- klass.woot.should eq(result)
385
+ expect(klass.woot).to eq(result)
386
386
  end
387
387
  end
388
388
  end
@@ -390,7 +390,7 @@ module RSpec
390
390
  context "with an expectation is set on a method that exists" do
391
391
  it "returns the expected value" do
392
392
  klass.any_instance.should_receive(:existing_method).and_return(1)
393
- klass.new.existing_method(1).should eq(1)
393
+ expect(klass.new.existing_method(1)).to eq(1)
394
394
  end
395
395
 
396
396
  it "fails if an instance is created but no invocation occurs" do
@@ -444,15 +444,15 @@ module RSpec
444
444
 
445
445
  it "returns the expected value when arguments match" do
446
446
  instance = klass.new
447
- instance.foo(:param_one, :param_two).should eq(:result_one)
448
- instance.foo(:param_three, :param_four).should eq(:result_two)
447
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
448
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
449
449
  end
450
450
 
451
451
  it "fails when the arguments match but different instances are used" do
452
452
  instances = Array.new(2) { klass.new }
453
453
  expect do
454
- instances[0].foo(:param_one, :param_two).should eq(:result_one)
455
- instances[1].foo(:param_three, :param_four).should eq(:result_two)
454
+ expect(instances[0].foo(:param_one, :param_two)).to eq(:result_one)
455
+ expect(instances[1].foo(:param_three, :param_four)).to eq(:result_two)
456
456
  end.to raise_error(RSpec::Mocks::MockExpectationError)
457
457
 
458
458
  # ignore the fact that should_receive expectations were not met
@@ -460,10 +460,10 @@ module RSpec
460
460
  end
461
461
 
462
462
  it "is not affected by the invocation of existing methods on other instances" do
463
- klass.new.existing_method_with_arguments(:param_one, :param_two).should eq(:existing_method_with_arguments_return_value)
463
+ expect(klass.new.existing_method_with_arguments(:param_one, :param_two)).to eq(:existing_method_with_arguments_return_value)
464
464
  instance = klass.new
465
- instance.foo(:param_one, :param_two).should eq(:result_one)
466
- instance.foo(:param_three, :param_four).should eq(:result_two)
465
+ expect(instance.foo(:param_one, :param_two)).to eq(:result_one)
466
+ expect(instance.foo(:param_three, :param_four)).to eq(:result_two)
467
467
  end
468
468
 
469
469
  it "fails when arguments do not match" do
@@ -615,7 +615,7 @@ module RSpec
615
615
  it "passes when the other expecations are met" do
616
616
  klass.any_instance.should_receive(:foo).never
617
617
  klass.any_instance.should_receive(:existing_method).and_return(5)
618
- klass.new.existing_method.should eq(5)
618
+ expect(klass.new.existing_method).to eq(5)
619
619
  end
620
620
 
621
621
  it "fails when the other expecations are not met" do
@@ -644,14 +644,14 @@ module RSpec
644
644
  it "does not interfere with other expectations" do
645
645
  klass.any_instance.should_receive(:foo).any_number_of_times
646
646
  klass.any_instance.should_receive(:existing_method).and_return(5)
647
- klass.new.existing_method.should eq(5)
647
+ expect(klass.new.existing_method).to eq(5)
648
648
  end
649
649
 
650
650
  context "when combined with other expectations" do
651
651
  it "passes when the other expecations are met" do
652
652
  klass.any_instance.should_receive(:foo).any_number_of_times
653
653
  klass.any_instance.should_receive(:existing_method).and_return(5)
654
- klass.new.existing_method.should eq(5)
654
+ expect(klass.new.existing_method).to eq(5)
655
655
  end
656
656
 
657
657
  it "fails when the other expecations are not met" do
@@ -678,14 +678,14 @@ module RSpec
678
678
  context "public methods" do
679
679
  before(:each) do
680
680
  klass.any_instance.stub(:existing_method).and_return(1)
681
- klass.method_defined?(:__existing_method_without_any_instance__).should be_true
681
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_true
682
682
  end
683
683
 
684
684
  it "restores the class to its original state after each example when no instance is created" do
685
685
  space.verify_all
686
686
 
687
- klass.method_defined?(:__existing_method_without_any_instance__).should be_false
688
- klass.new.existing_method.should eq(existing_method_return_value)
687
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_false
688
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
689
689
  end
690
690
 
691
691
  it "restores the class to its original state after each example when one instance is created" do
@@ -693,8 +693,8 @@ module RSpec
693
693
 
694
694
  space.verify_all
695
695
 
696
- klass.method_defined?(:__existing_method_without_any_instance__).should be_false
697
- klass.new.existing_method.should eq(existing_method_return_value)
696
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_false
697
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
698
698
  end
699
699
 
700
700
  it "restores the class to its original state after each example when more than one instance is created" do
@@ -703,8 +703,8 @@ module RSpec
703
703
 
704
704
  space.verify_all
705
705
 
706
- klass.method_defined?(:__existing_method_without_any_instance__).should be_false
707
- klass.new.existing_method.should eq(existing_method_return_value)
706
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_false
707
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
708
708
  end
709
709
  end
710
710
 
@@ -715,15 +715,15 @@ module RSpec
715
715
  end
716
716
 
717
717
  it "cleans up the backed up method" do
718
- klass.method_defined?(:__existing_method_without_any_instance__).should be_false
718
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_false
719
719
  end
720
720
 
721
721
  it "restores a stubbed private method after the spec is run" do
722
- klass.private_method_defined?(:private_method).should be_true
722
+ expect(klass.private_method_defined?(:private_method)).to be_true
723
723
  end
724
724
 
725
725
  it "ensures that the restored method behaves as it originally did" do
726
- klass.new.send(:private_method).should eq(:private_method_return_value)
726
+ expect(klass.new.send(:private_method)).to eq(:private_method_return_value)
727
727
  end
728
728
  end
729
729
  end
@@ -737,15 +737,15 @@ module RSpec
737
737
  end
738
738
 
739
739
  it "cleans up the backed up method" do
740
- klass.method_defined?(:__existing_method_without_any_instance__).should be_false
740
+ expect(klass.method_defined?(:__existing_method_without_any_instance__)).to be_false
741
741
  end
742
742
 
743
743
  it "restores a stubbed private method after the spec is run" do
744
- klass.private_method_defined?(:private_method).should be_true
744
+ expect(klass.private_method_defined?(:private_method)).to be_true
745
745
  end
746
746
 
747
747
  it "ensures that the restored method behaves as it originally did" do
748
- klass.new.send(:private_method).should eq(:private_method_return_value)
748
+ expect(klass.new.send(:private_method)).to eq(:private_method_return_value)
749
749
  end
750
750
  end
751
751
 
@@ -757,7 +757,7 @@ module RSpec
757
757
  end
758
758
 
759
759
  it "second spec" do
760
- klass.new.existing_method.should eq(existing_method_return_value)
760
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
761
761
  end
762
762
  end
763
763
 
@@ -772,7 +772,7 @@ module RSpec
772
772
  end
773
773
 
774
774
  it "second spec" do
775
- @instance.existing_method.should eq(existing_method_return_value)
775
+ expect(@instance.existing_method).to eq(existing_method_return_value)
776
776
  end
777
777
  end
778
778
  end
@@ -782,7 +782,7 @@ module RSpec
782
782
  klass.new.existing_method
783
783
  space.verify_all
784
784
 
785
- klass.new.existing_method.should eq(existing_method_return_value)
785
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
786
786
  end
787
787
  end
788
788
  end
@@ -793,21 +793,21 @@ module RSpec
793
793
  klass.any_instance.stub(:existing_method).and_return(true)
794
794
 
795
795
  klass.rspec_verify
796
- klass.new.should respond_to(:existing_method)
797
- klass.new.existing_method.should eq(existing_method_return_value)
796
+ expect(klass.new).to respond_to(:existing_method)
797
+ expect(klass.new.existing_method).to eq(existing_method_return_value)
798
798
  end
799
799
  end
800
800
 
801
801
  it "adds an class to the current space when #any_instance is invoked" do
802
802
  klass.any_instance
803
- RSpec::Mocks::space.send(:receivers).should include(klass)
803
+ expect(RSpec::Mocks::space.send(:receivers)).to include(klass)
804
804
  end
805
805
 
806
806
  it "adds an instance to the current space when stubbed method is invoked" do
807
807
  klass.any_instance.stub(:foo)
808
808
  instance = klass.new
809
809
  instance.foo
810
- RSpec::Mocks::space.send(:receivers).should include(instance)
810
+ expect(RSpec::Mocks::space.send(:receivers)).to include(instance)
811
811
  end
812
812
  end
813
813
 
@@ -816,7 +816,7 @@ module RSpec
816
816
  Object.any_instance.stub(:some_method)
817
817
  o = Object.new
818
818
  o.some_method
819
- lambda { o.dup.some_method }.should_not raise_error(SystemStackError)
819
+ expect { o.dup.some_method }.to_not raise_error(SystemStackError)
820
820
  end
821
821
 
822
822
  it "doesn't bomb if the object doesn't support `dup`" do
@@ -834,7 +834,7 @@ module RSpec
834
834
 
835
835
  klass.any_instance
836
836
 
837
- lambda { klass.new.dup('Dup dup dup') }.should_not raise_error(ArgumentError)
837
+ expect { klass.new.dup('Dup dup dup') }.to_not raise_error(ArgumentError)
838
838
  end
839
839
  end
840
840
 
@@ -843,7 +843,7 @@ module RSpec
843
843
 
844
844
  it "stubs the method correctly" do
845
845
  klass.any_instance.stub(:existing_method).and_return("foo")
846
- sub_klass.new.existing_method.should == "foo"
846
+ expect(sub_klass.new.existing_method).to eq "foo"
847
847
  end
848
848
 
849
849
  it "mocks the method correctly" do
@@ -862,12 +862,12 @@ module RSpec
862
862
 
863
863
  it "stubs the method correctly" do
864
864
  http_request_class.any_instance.stub(:existing_method).and_return("foo")
865
- http_request_class.new.existing_method.should == "foo"
865
+ expect(http_request_class.new.existing_method).to eq "foo"
866
866
  end
867
867
 
868
868
  it "mocks the method correctly" do
869
869
  http_request_class.any_instance.should_receive(:existing_method).and_return("foo")
870
- http_request_class.new.existing_method.should == "foo"
870
+ expect(http_request_class.new.existing_method).to eq "foo"
871
871
  end
872
872
  end
873
873
 
@@ -876,11 +876,11 @@ module RSpec
876
876
  klass.any_instance.stub(:existing_method).and_return(:stubbed_return_value)
877
877
 
878
878
  instance = klass.new
879
- instance.existing_method.should == :stubbed_return_value
879
+ expect(instance.existing_method).to eq :stubbed_return_value
880
880
 
881
881
  RSpec::Mocks.verify
882
882
 
883
- instance.existing_method.should == :existing_method_return_value
883
+ expect(instance.existing_method).to eq :existing_method_return_value
884
884
  end
885
885
  end
886
886
  end