rspec-mocks 2.99.4 → 3.0.0.beta1
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.
- checksums.yaml +14 -6
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +1 -0
- data/Changelog.md +89 -105
- data/License.txt +1 -0
- data/README.md +77 -57
- data/features/argument_matchers/explicit.feature +5 -5
- data/features/argument_matchers/general_matchers.feature +10 -10
- data/features/argument_matchers/type_matchers.feature +3 -3
- data/features/message_expectations/allow_any_instance_of.feature +1 -1
- data/features/message_expectations/any_instance.feature +27 -5
- data/features/message_expectations/call_original.feature +2 -2
- data/features/message_expectations/expect_message_using_expect.feature +2 -2
- data/features/message_expectations/expect_message_using_should_receive.feature +2 -2
- data/features/message_expectations/receive_counts.feature +7 -7
- data/features/message_expectations/warn_when_expectation_is_set_on_nil.feature +3 -3
- data/features/method_stubs/README.md +3 -0
- data/features/method_stubs/any_instance.feature +11 -11
- data/features/method_stubs/as_null_object.feature +4 -4
- data/features/method_stubs/simple_return_value_with_stub.feature +7 -7
- data/features/method_stubs/stub_chain.feature +3 -3
- data/features/method_stubs/stub_implementation.feature +2 -2
- data/features/method_stubs/to_ary.feature +2 -2
- data/features/mutating_constants/hiding_defined_constant.feature +2 -2
- data/features/mutating_constants/stub_defined_constant.feature +5 -5
- data/features/mutating_constants/stub_undefined_constant.feature +6 -6
- data/features/outside_rspec/configuration.feature +0 -2
- data/features/outside_rspec/standalone.feature +1 -1
- data/features/spies/spy_partial_mock_method.feature +2 -2
- data/features/spies/spy_pure_mock_method.feature +5 -5
- data/features/spies/spy_unstubbed_method.feature +1 -1
- data/features/support/env.rb +10 -1
- data/features/test_frameworks/test_unit.feature +1 -1
- data/features/verifying_doubles/class_doubles.feature +88 -0
- data/features/verifying_doubles/dynamic_classes.feature +72 -0
- data/features/verifying_doubles/introduction.feature +85 -0
- data/features/verifying_doubles/object_doubles.feature +65 -0
- data/features/verifying_doubles/partial_doubles.feature +34 -0
- data/lib/rspec/mocks.rb +8 -34
- data/lib/rspec/mocks/any_instance/chain.rb +4 -34
- data/lib/rspec/mocks/any_instance/expectation_chain.rb +14 -4
- data/lib/rspec/mocks/any_instance/message_chains.rb +27 -12
- data/lib/rspec/mocks/any_instance/recorder.rb +23 -31
- data/lib/rspec/mocks/any_instance/stub_chain.rb +9 -4
- data/lib/rspec/mocks/argument_list_matcher.rb +8 -1
- data/lib/rspec/mocks/argument_matchers.rb +26 -12
- data/lib/rspec/mocks/arity_calculator.rb +66 -0
- data/lib/rspec/mocks/configuration.rb +42 -14
- data/lib/rspec/mocks/error_generator.rb +34 -10
- data/lib/rspec/mocks/example_methods.rb +64 -19
- data/lib/rspec/mocks/extensions/marshal.rb +0 -15
- data/lib/rspec/mocks/framework.rb +4 -4
- data/lib/rspec/mocks/instance_method_stasher.rb +80 -62
- data/lib/rspec/mocks/matchers/have_received.rb +18 -14
- data/lib/rspec/mocks/matchers/receive.rb +29 -7
- data/lib/rspec/mocks/matchers/receive_messages.rb +72 -0
- data/lib/rspec/mocks/message_expectation.rb +95 -148
- data/lib/rspec/mocks/method_double.rb +77 -139
- data/lib/rspec/mocks/method_reference.rb +95 -0
- data/lib/rspec/mocks/mock.rb +1 -1
- data/lib/rspec/mocks/mutate_const.rb +12 -9
- data/lib/rspec/mocks/object_reference.rb +90 -0
- data/lib/rspec/mocks/order_group.rb +49 -7
- data/lib/rspec/mocks/proxy.rb +72 -33
- data/lib/rspec/mocks/proxy_for_nil.rb +2 -2
- data/lib/rspec/mocks/space.rb +13 -18
- data/lib/rspec/mocks/stub_chain.rb +2 -2
- data/lib/rspec/mocks/syntax.rb +61 -36
- data/lib/rspec/mocks/targets.rb +40 -19
- data/lib/rspec/mocks/test_double.rb +12 -56
- data/lib/rspec/mocks/verifying_double.rb +77 -0
- data/lib/rspec/mocks/verifying_message_expecation.rb +60 -0
- data/lib/rspec/mocks/verifying_proxy.rb +151 -0
- data/lib/rspec/mocks/version.rb +1 -1
- data/spec/rspec/mocks/and_call_original_spec.rb +34 -30
- data/spec/rspec/mocks/and_yield_spec.rb +2 -2
- data/spec/rspec/mocks/any_instance/message_chains_spec.rb +1 -1
- data/spec/rspec/mocks/any_instance_spec.rb +53 -260
- data/spec/rspec/mocks/argument_expectation_spec.rb +4 -4
- data/spec/rspec/mocks/arity_calculator_spec.rb +95 -0
- data/spec/rspec/mocks/array_including_matcher_spec.rb +41 -0
- data/spec/rspec/mocks/at_least_spec.rb +4 -32
- data/spec/rspec/mocks/block_return_value_spec.rb +4 -135
- data/spec/rspec/mocks/combining_implementation_instructions_spec.rb +10 -11
- data/spec/rspec/mocks/configuration_spec.rb +79 -0
- data/spec/rspec/mocks/double_spec.rb +10 -78
- data/spec/rspec/mocks/extensions/marshal_spec.rb +0 -8
- data/spec/rspec/mocks/failing_argument_matchers_spec.rb +49 -4
- data/spec/rspec/mocks/instance_method_stasher_spec.rb +20 -3
- data/spec/rspec/mocks/matchers/have_received_spec.rb +74 -0
- data/spec/rspec/mocks/matchers/receive_messages_spec.rb +140 -0
- data/spec/rspec/mocks/matchers/receive_spec.rb +82 -42
- data/spec/rspec/mocks/methods_spec.rb +1 -1
- data/spec/rspec/mocks/{bug_report_830_spec.rb → mock_expectation_error_spec.rb} +4 -3
- data/spec/rspec/mocks/mock_ordering_spec.rb +11 -0
- data/spec/rspec/mocks/mock_space_spec.rb +10 -1
- data/spec/rspec/mocks/mock_spec.rb +26 -82
- data/spec/rspec/mocks/multiple_return_value_spec.rb +1 -1
- data/spec/rspec/mocks/mutate_const_spec.rb +18 -5
- data/spec/rspec/mocks/null_object_mock_spec.rb +6 -4
- data/spec/rspec/mocks/options_hash_spec.rb +3 -3
- data/spec/rspec/mocks/order_group_spec.rb +27 -0
- data/spec/rspec/mocks/partial_mock_spec.rb +101 -1
- data/spec/rspec/mocks/passing_argument_matchers_spec.rb +3 -20
- data/spec/rspec/mocks/record_messages_spec.rb +4 -4
- data/spec/rspec/mocks/serialization_spec.rb +4 -6
- data/spec/rspec/mocks/space_spec.rb +3 -3
- data/spec/rspec/mocks/stub_chain_spec.rb +0 -12
- data/spec/rspec/mocks/stub_spec.rb +23 -44
- data/spec/rspec/mocks/test_double_spec.rb +3 -22
- data/spec/rspec/mocks/verifying_double_spec.rb +327 -0
- data/spec/rspec/mocks/verifying_message_expecation_spec.rb +68 -0
- data/spec/rspec/mocks_spec.rb +16 -39
- data/spec/spec_helper.rb +29 -18
- metadata +131 -86
- metadata.gz.sig +1 -0
- data/features/message_expectations/expect_any_instance_of.feature +0 -27
- data/lib/rspec/mocks/caller_filter.rb +0 -60
- data/lib/rspec/mocks/deprecation.rb +0 -26
- data/lib/rspec/mocks/extensions/instance_exec.rb +0 -34
- data/lib/rspec/mocks/extensions/proc.rb +0 -63
- data/lib/spec/mocks.rb +0 -4
- data/spec/rspec/mocks/and_return_spec.rb +0 -17
- data/spec/rspec/mocks/any_number_of_times_spec.rb +0 -36
- data/spec/rspec/mocks/before_all_spec.rb +0 -74
- data/spec/rspec/mocks/bug_report_10260_spec.rb +0 -8
- data/spec/rspec/mocks/bug_report_10263_spec.rb +0 -27
- data/spec/rspec/mocks/bug_report_11545_spec.rb +0 -32
- data/spec/rspec/mocks/bug_report_496_spec.rb +0 -17
- data/spec/rspec/mocks/bug_report_600_spec.rb +0 -22
- data/spec/rspec/mocks/bug_report_7611_spec.rb +0 -16
- data/spec/rspec/mocks/bug_report_8165_spec.rb +0 -31
- data/spec/rspec/mocks/bug_report_957_spec.rb +0 -22
metadata.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
���
|
@@ -1,27 +0,0 @@
|
|
1
|
-
Feature: expect a message on any instance of a class
|
2
|
-
|
3
|
-
Use `expect_any_instance_of(Class).to receive` to set an expectation that one
|
4
|
-
(and only one) instance of a class receives a message before the example is
|
5
|
-
completed. The spec will fail if no instance receives a message.
|
6
|
-
|
7
|
-
Scenario: expect a message on any instance of a class
|
8
|
-
Given a file named "example_spec.rb" with:
|
9
|
-
"""ruby
|
10
|
-
describe "expect_any_instance_of" do
|
11
|
-
before do
|
12
|
-
expect_any_instance_of(Object).to receive(:foo).and_return(:return_value)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "verifies that one instance of the class receives the message" do
|
16
|
-
o = Object.new
|
17
|
-
expect(o.foo).to eq(:return_value)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "fails unless an instance receives that message" do
|
21
|
-
o = Object.new
|
22
|
-
end
|
23
|
-
end
|
24
|
-
"""
|
25
|
-
When I run `rspec example_spec.rb`
|
26
|
-
Then the output should contain "2 examples, 1 failure"
|
27
|
-
And the output should contain "1) expect_any_instance_of fails unless an instance receives that message"
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
# Consistent implementation for "cleaning" the caller method to strip out
|
3
|
-
# non-rspec lines. This enables errors to be reported at the call site in
|
4
|
-
# the code using the library, which is far more useful than the particular
|
5
|
-
# internal method that raised an error.
|
6
|
-
|
7
|
-
unless defined?(CallerFilter)
|
8
|
-
|
9
|
-
class CallerFilter
|
10
|
-
|
11
|
-
RSPEC_LIBS = %w[
|
12
|
-
core
|
13
|
-
mocks
|
14
|
-
expectations
|
15
|
-
matchers
|
16
|
-
rails
|
17
|
-
]
|
18
|
-
|
19
|
-
ADDITIONAL_TOP_LEVEL_FILES = %w[ autorun ]
|
20
|
-
|
21
|
-
LIB_REGEX = %r{/lib/rspec/(#{(RSPEC_LIBS + ADDITIONAL_TOP_LEVEL_FILES).join('|')})(\.rb|/)}
|
22
|
-
|
23
|
-
if RUBY_VERSION >= '2.0.0'
|
24
|
-
def self.first_non_rspec_line
|
25
|
-
# `caller` is an expensive method that scales linearly with the size of
|
26
|
-
# the stack. The performance hit for fetching it in chunks is small,
|
27
|
-
# and since the target line is probably near the top of the stack, the
|
28
|
-
# overall improvement of a chunked search like this is significant.
|
29
|
-
#
|
30
|
-
# See benchmarks/caller.rb for measurements.
|
31
|
-
|
32
|
-
# Initial value here is mostly arbitrary, but is chosen to give good
|
33
|
-
# performance on the common case of creating a double.
|
34
|
-
increment = 5
|
35
|
-
i = 1
|
36
|
-
line = nil
|
37
|
-
|
38
|
-
while !line
|
39
|
-
stack = caller(i, increment)
|
40
|
-
return nil unless stack
|
41
|
-
|
42
|
-
line = stack.find { |l| l !~ LIB_REGEX }
|
43
|
-
|
44
|
-
i += increment
|
45
|
-
increment *= 2 # The choice of two here is arbitrary.
|
46
|
-
end
|
47
|
-
|
48
|
-
line
|
49
|
-
end
|
50
|
-
else
|
51
|
-
# Earlier rubies do not support the two argument form of `caller`. This
|
52
|
-
# fallback is logically the same, but slower.
|
53
|
-
def self.first_non_rspec_line
|
54
|
-
caller.find { |line| line !~ LIB_REGEX }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Mocks
|
3
|
-
module Deprecation
|
4
|
-
# @private
|
5
|
-
#
|
6
|
-
# Used internally to print deprecation warnings
|
7
|
-
def deprecate(deprecated, options={})
|
8
|
-
message = "DEPRECATION: #{deprecated} is deprecated."
|
9
|
-
message << " Use #{options[:replacement]} instead." if options[:replacement]
|
10
|
-
message << " Called from #{CallerFilter.first_non_rspec_line}."
|
11
|
-
warn message
|
12
|
-
end
|
13
|
-
|
14
|
-
# @private
|
15
|
-
#
|
16
|
-
# Used internally to print deprecation warnings
|
17
|
-
def warn_deprecation(warning)
|
18
|
-
message = "\nDEPRECATION: #{warning}\n"
|
19
|
-
warn message
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
extend(Mocks::Deprecation) unless respond_to?(:deprecate)
|
25
|
-
end
|
26
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Mocks
|
3
|
-
# @private
|
4
|
-
module InstanceExec
|
5
|
-
unless respond_to?(:instance_exec)
|
6
|
-
# @private
|
7
|
-
#
|
8
|
-
# based on Bounded Spec InstanceExec (Mauricio Fernandez)
|
9
|
-
# http://eigenclass.org/hiki/bounded+space+instance_exec
|
10
|
-
# - uses singleton_class of matcher instead of global
|
11
|
-
# InstanceExecHelper module
|
12
|
-
# - this keeps it scoped to this class only, which is the
|
13
|
-
# only place we need it
|
14
|
-
# - only necessary for ruby 1.8.6
|
15
|
-
def instance_exec(*args, &block)
|
16
|
-
singleton_class = (class << self; self; end)
|
17
|
-
begin
|
18
|
-
orig_critical, Thread.critical = Thread.critical, true
|
19
|
-
n = 0
|
20
|
-
n += 1 while respond_to?(method_name="__instance_exec#{n}")
|
21
|
-
singleton_class.module_eval{ define_method(method_name, &block) }
|
22
|
-
ensure
|
23
|
-
Thread.critical = orig_critical
|
24
|
-
end
|
25
|
-
begin
|
26
|
-
return send(method_name, *args)
|
27
|
-
ensure
|
28
|
-
singleton_class.module_eval{ remove_method(method_name) } rescue nil
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
unless Proc.method_defined? :lambda?
|
2
|
-
module Backports
|
3
|
-
def self.alias_method_chain(mod, target, feature)
|
4
|
-
mod.class_eval do
|
5
|
-
# Strip out punctuation on predicates or bang methods since
|
6
|
-
# e.g. target?_without_feature is not a valid method name.
|
7
|
-
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
|
8
|
-
yield(aliased_target, punctuation) if block_given?
|
9
|
-
|
10
|
-
with_method, without_method = "#{aliased_target}_with_#{feature}#{punctuation}", "#{aliased_target}_without_#{feature}#{punctuation}"
|
11
|
-
|
12
|
-
alias_method without_method, target
|
13
|
-
alias_method target, with_method
|
14
|
-
|
15
|
-
case
|
16
|
-
when public_method_defined?(without_method)
|
17
|
-
public target
|
18
|
-
when protected_method_defined?(without_method)
|
19
|
-
protected target
|
20
|
-
when private_method_defined?(without_method)
|
21
|
-
private target
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Proc
|
28
|
-
# Standard in Ruby 1.9. See official documentation[http://ruby-doc.org/core-1.9/classes/Proc.html]
|
29
|
-
def lambda?
|
30
|
-
!!__is_lambda__
|
31
|
-
end
|
32
|
-
|
33
|
-
attr_accessor :__is_lambda__
|
34
|
-
private :__is_lambda__
|
35
|
-
private :__is_lambda__=
|
36
|
-
end
|
37
|
-
|
38
|
-
class Method
|
39
|
-
def to_proc_with_lambda_tracking
|
40
|
-
proc = to_proc_without_lambda_tracking
|
41
|
-
proc.send :__is_lambda__=, true
|
42
|
-
proc
|
43
|
-
end
|
44
|
-
Backports.alias_method_chain self, :to_proc, :lambda_tracking
|
45
|
-
end
|
46
|
-
|
47
|
-
module Kernel
|
48
|
-
def lambda_with_lambda_tracking(&block)
|
49
|
-
l = lambda_without_lambda_tracking(&block)
|
50
|
-
l.send :__is_lambda__=, true unless block.send(:__is_lambda__) == false
|
51
|
-
l
|
52
|
-
end
|
53
|
-
|
54
|
-
def proc_with_lambda_tracking(&block)
|
55
|
-
l = proc_without_lambda_tracking(&block)
|
56
|
-
l.send :__is_lambda__=, block.send(:__is_lambda__) == true
|
57
|
-
l
|
58
|
-
end
|
59
|
-
|
60
|
-
Backports.alias_method_chain self, :lambda, :lambda_tracking
|
61
|
-
Backports.alias_method_chain self, :proc, :lambda_tracking
|
62
|
-
end
|
63
|
-
end
|
data/lib/spec/mocks.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module RSpec
|
4
|
-
module Mocks
|
5
|
-
describe 'and_return' do
|
6
|
-
let(:obj) { double('obj') }
|
7
|
-
|
8
|
-
context 'when no argument is passed' do
|
9
|
-
it 'warns of deprection' do
|
10
|
-
expect_warn_deprecation_with_call_site(__FILE__, __LINE__ + 1, '`and_return` without arguments')
|
11
|
-
obj.stub(:foo).and_return
|
12
|
-
expect(obj.foo).to be_nil
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "AnyNumberOfTimes" do
|
4
|
-
before(:each) do
|
5
|
-
@mock = RSpec::Mocks::Double.new("test mock")
|
6
|
-
allow(RSpec).to receive(:deprecate)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "is deprecated" do
|
10
|
-
expect(RSpec).to receive(:deprecate).with("any_number_of_times", :replacement => "stub")
|
11
|
-
expect(@mock).to receive(:random_call).any_number_of_times
|
12
|
-
end
|
13
|
-
|
14
|
-
it "passes if any number of times method is called many times" do
|
15
|
-
@mock.should_receive(:random_call).any_number_of_times
|
16
|
-
(1..10).each do
|
17
|
-
@mock.random_call
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it "passes if any number of times method is called once" do
|
22
|
-
@mock.should_receive(:random_call).any_number_of_times
|
23
|
-
@mock.random_call
|
24
|
-
end
|
25
|
-
|
26
|
-
it "passes if any number of times method is not called" do
|
27
|
-
@mock.should_receive(:random_call).any_number_of_times
|
28
|
-
end
|
29
|
-
|
30
|
-
it "returns the mocked value when called after a similar stub" do
|
31
|
-
@mock.stub(:message).and_return :stub_value
|
32
|
-
@mock.should_receive(:message).any_number_of_times.and_return(:mock_value)
|
33
|
-
expect(@mock.message).to eq :mock_value
|
34
|
-
expect(@mock.message).to eq :mock_value
|
35
|
-
end
|
36
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "using rspec-mocks constructs in before(:all)" do
|
4
|
-
deprecations = []
|
5
|
-
|
6
|
-
def in_rspec_singleton_class(&block)
|
7
|
-
klass = class << ::RSpec; self; end
|
8
|
-
klass.class_eval(&block)
|
9
|
-
end
|
10
|
-
|
11
|
-
before(:all) do
|
12
|
-
in_rspec_singleton_class do
|
13
|
-
alias old_deprecate deprecate
|
14
|
-
undef deprecate
|
15
|
-
define_method(:deprecate) { |*args| deprecations << args.first }
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
after(:all) do
|
20
|
-
in_rspec_singleton_class do
|
21
|
-
undef deprecate
|
22
|
-
alias deprecate old_deprecate
|
23
|
-
undef old_deprecate
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "a method stub" do
|
28
|
-
before(:all) do
|
29
|
-
deprecations.clear
|
30
|
-
Object.stub(:foo) { 13 }
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'works in examples and prints a deprecation' do
|
34
|
-
expect(Object.foo).to eq(13)
|
35
|
-
expect(deprecations).to include(match(/outside the per-test lifecycle/))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "an any_instance stub" do
|
40
|
-
before(:all) do
|
41
|
-
deprecations.clear
|
42
|
-
Object.any_instance.stub(:foo => 13)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'works in examples and prints a deprecation' do
|
46
|
-
expect(Object.new.foo).to eq(13)
|
47
|
-
expect(deprecations).to include(match(/outside the per-test lifecycle/))
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "constant stubbing" do
|
52
|
-
before(:all) do
|
53
|
-
deprecations.clear
|
54
|
-
RSpec::Mocks::ConstantMutator.stub("Foo23", 23)
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'works in examples and prints a deprecation' do
|
58
|
-
expect(Foo23).to eq(23)
|
59
|
-
expect(deprecations).to include(match(/outside the per-test lifecycle/))
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe "constant hiding" do
|
64
|
-
before(:all) do
|
65
|
-
deprecations.clear
|
66
|
-
RSpec::Mocks::ConstantMutator.hide("SomeClass")
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'works in examples and prints a deprecation' do
|
70
|
-
expect(deprecations).to include(match(/outside the per-test lifecycle/))
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Double" do
|
4
|
-
let(:test_double) { double }
|
5
|
-
|
6
|
-
specify "when one example has an expectation inside the block passed to should_receive" do
|
7
|
-
test_double.should_receive(:msg) do |arg|
|
8
|
-
expect(arg).to be true #this call exposes the problem
|
9
|
-
end
|
10
|
-
begin
|
11
|
-
test_double.msg(false)
|
12
|
-
rescue Exception
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
specify "then the next example should behave as expected instead of saying" do
|
17
|
-
test_double.should_receive(:foobar)
|
18
|
-
test_double.foobar
|
19
|
-
verify test_double
|
20
|
-
begin
|
21
|
-
test_double.foobar
|
22
|
-
rescue Exception => e
|
23
|
-
expect(e.message).to eq "Double received unexpected message :foobar with (no args)"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class LiarLiarPantsOnFire
|
4
|
-
def respond_to?(message, incl_private=false)
|
5
|
-
true
|
6
|
-
end
|
7
|
-
|
8
|
-
def self.respond_to?(message, incl_private=false)
|
9
|
-
true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe 'should_receive' do
|
14
|
-
before(:each) do
|
15
|
-
@liar = LiarLiarPantsOnFire.new
|
16
|
-
end
|
17
|
-
|
18
|
-
it "works when object lies about responding to a method" do
|
19
|
-
@liar.should_receive(:something)
|
20
|
-
@liar.something
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'works when class lies about responding to a method' do
|
24
|
-
LiarLiarPantsOnFire.should_receive(:something)
|
25
|
-
LiarLiarPantsOnFire.something
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'cleans up after itself' do
|
29
|
-
expect((class << LiarLiarPantsOnFire; self; end).instance_methods).not_to include("something")
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module BugReport496
|
4
|
-
describe "a message expectation on a base class object" do
|
5
|
-
class BaseClass
|
6
|
-
end
|
7
|
-
|
8
|
-
class SubClass < BaseClass
|
9
|
-
end
|
10
|
-
|
11
|
-
it "is received" do
|
12
|
-
BaseClass.should_receive(:new).once
|
13
|
-
SubClass.new
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|