diff --git a/lib/minitest/mock.rb b/lib/minitest/mock.rb index 50edc1a4..bb3fedbf 100644 --- a/lib/minitest/mock.rb +++ b/lib/minitest/mock.rb @@ -65,8 +65,7 @@ def initialize(delegator = nil) # :nodoc: # @mock.verify # => true # # @mock.expect(:uses_one_string, true, ["foo"]) - # @mock.uses_one_string("bar") # => true - # @mock.verify # => raises MockExpectationError + # @mock.uses_one_string("bar") # => raises MockExpectationError def expect(name, retval, args = [], &blk) name = name.to_sym @@ -96,16 +95,11 @@ def __call name, data # :nodoc: # expected. def verify - @expected_calls.each do |name, calls| - calls.each do |expected| - raise MockExpectationError, "expected #{__call name, expected}, got [#{__call name, @actual_calls[name]}]" if - @actual_calls.key?(name) and - not @actual_calls[name].include?(expected) - - raise MockExpectationError, "expected #{__call name, expected}" unless - @actual_calls.key?(name) and - @actual_calls[name].include?(expected) - end + @expected_calls.each do |name, expected| + actual = @actual_calls.fetch(name, nil) + raise MockExpectationError, "expected #{__call name, expected[0]}" unless actual + raise MockExpectationError, "expected #{__call name, expected[actual.size]}, got [#{__call name, actual}]" if + actual.size < expected.size end true end diff --git a/test/minitest/test_minitest_mock.rb b/test/minitest/test_minitest_mock.rb index 6e3d9b38..11b69248 100644 --- a/test/minitest/test_minitest_mock.rb +++ b/test/minitest/test_minitest_mock.rb @@ -240,6 +240,20 @@ def test_same_method_expects_blow_up_when_not_all_called assert_equal exp, e.message end + def test_same_method_expects_with_same_args_blow_up_when_not_all_called + mock = Minitest::Mock.new + mock.expect :foo, nil, [:bar] + mock.expect :foo, nil, [:bar] + + mock.foo :bar + + e = assert_raises(MockExpectationError) { mock.verify } + + exp = "expected foo(:bar) => nil, got [foo(:bar) => nil]" + + assert_equal exp, e.message + end + def test_verify_passes_when_mock_block_returns_true mock = Minitest::Mock.new mock.expect :foo, nil do