Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

When not as_null_object, respond_to? now behaves as expected.

  • Loading branch information...
commit dae790fdc9eff8350dcd0de8bf16ab87d435db4a 1 parent 56323d9
@dchelimsky dchelimsky authored
View
2  lib/rspec/mocks/mock.rb
@@ -35,7 +35,7 @@ def to_s
alias_method :to_str, :to_s
def respond_to?(sym, incl_private=false)
- __mock_proxy.respond_to?(sym, incl_private)
+ __mock_proxy.null_object? ? true : super
end
private
View
4 lib/rspec/mocks/proxy.rb
@@ -38,10 +38,6 @@ def null_object?
@null_object
end
- def respond_to?(sym, incl_private=false)
- null_object? ? true : super
- end
-
# Tells the object to ignore any messages that aren't explicitly set as
# stubs or message expectations.
def as_null_object
View
63 spec/rspec/mocks/null_object_mock_spec.rb
@@ -2,42 +2,64 @@
module RSpec
module Mocks
- describe "a mock acting as a NullObject" do
+ describe "a double _not_ acting as a null object" do
before(:each) do
- @mock = RSpec::Mocks::Mock.new("null_object").as_null_object
+ @double = double('non-null object')
+ end
+
+ it "says it does not respond to messages it doesn't understand" do
+ @double.should_not respond_to(:foo)
+ end
+
+ it "says it responds to messages it does understand" do
+ @double.stub(:foo)
+ @double.should respond_to(:foo)
+ end
+ end
+
+ describe "a double acting as a null object" do
+ before(:each) do
+ @double = double('null object').as_null_object
+ end
+
+ it "says it responds to everything" do
+ @double.should respond_to(:any_message_it_gets)
end
it "allows explicit expectation" do
- @mock.should_receive(:something)
- @mock.something
+ @double.should_receive(:something)
+ @double.something
end
it "fails verification when explicit exception not met" do
lambda do
- @mock.should_receive(:something)
- @mock.rspec_verify
+ @double.should_receive(:something)
+ @double.rspec_verify
end.should raise_error(RSpec::Mocks::MockExpectationError)
end
it "ignores unexpected methods" do
- @mock.random_call("a", "d", "c")
- @mock.rspec_verify
+ @double.random_call("a", "d", "c")
+ @double.rspec_verify
end
it "allows expected message with different args first" do
- @mock.should_receive(:message).with(:expected_arg)
- @mock.message(:unexpected_arg)
- @mock.message(:expected_arg)
+ @double.should_receive(:message).with(:expected_arg)
+ @double.message(:unexpected_arg)
+ @double.message(:expected_arg)
end
it "allows expected message with different args second" do
- @mock.should_receive(:message).with(:expected_arg)
- @mock.message(:expected_arg)
- @mock.message(:unexpected_arg)
+ @double.should_receive(:message).with(:expected_arg)
+ @double.message(:expected_arg)
+ @double.message(:unexpected_arg)
end
-
- it "responds to everything" do
- @mock.should respond_to(:any_message_it_gets)
+ end
+
+ describe "#as_null_object" do
+ it "sets the object to null_object" do
+ obj = double('anything').as_null_object
+ obj.should be_null_object
end
end
@@ -47,12 +69,5 @@ module Mocks
obj.should_not be_null_object
end
end
-
- describe "#as_null_object" do
- it "sets the object to null_object" do
- obj = double('anything').as_null_object
- obj.should be_null_object
- end
- end
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.