diff options
Diffstat (limited to 'spec/mspec/lib/mspec/mocks/mock.rb')
-rw-r--r-- | spec/mspec/lib/mspec/mocks/mock.rb | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/spec/mspec/lib/mspec/mocks/mock.rb b/spec/mspec/lib/mspec/mocks/mock.rb index b11d469186..cb4875bbd6 100644 --- a/spec/mspec/lib/mspec/mocks/mock.rb +++ b/spec/mspec/lib/mspec/mocks/mock.rb @@ -54,6 +54,11 @@ module Mock key = replaced_key obj, sym sym = sym.to_sym + if type == :stub and mocks.key?(key) + # Defining a stub and there is already a mock, ignore the stub + return + end + if (sym == :respond_to? or mock_respond_to?(obj, sym, true)) and !replaced?(key.first) meta.__send__ :alias_method, key.first, sym end @@ -73,6 +78,11 @@ module Mock MSpec.actions :expectation, MSpec.current.state end + if proxy.mock? and stubs.key?(key) + # Defining a mock and there is already a stub, remove the stub + stubs.delete key + end + if proxy.stub? stubs[key].unshift proxy else @@ -87,6 +97,10 @@ module Mock obj.instance_variable_get(:@name) || obj.inspect end + def self.inspect_args(args) + "(#{Array(args).map(&:inspect).join(', ')})" + end + def self.verify_count mocks.each do |key, proxies| obj = objects[key] @@ -106,7 +120,7 @@ module Mock end unless pass SpecExpectation.fail_with( - "Mock '#{name_or_inspect obj}' expected to receive '#{key.last}' " + \ + "Mock '#{name_or_inspect obj}' expected to receive #{key.last}#{inspect_args proxy.arguments} " + \ "#{qualifier.to_s.sub('_', ' ')} #{count} times", "but received it #{proxy.calls} times") end @@ -120,7 +134,7 @@ module Mock key = replaced_key obj, sym [mocks, stubs].each do |proxies| - proxies[key].each do |proxy| + proxies.fetch(key, []).each do |proxy| pass = case proxy.arguments when :any_args true @@ -166,7 +180,7 @@ module Mock mock_respond_to? obj, *args else SpecExpectation.fail_with("Mock '#{name_or_inspect obj}': method #{sym}\n", - "called with unexpected arguments (#{Array(compare).join(' ')})") + "called with unexpected arguments #{inspect_args compare}") end end |