From 53f64c0fb27349541ded62946d66c429fbef86fa Mon Sep 17 00:00:00 2001 From: Kasper Timm Hansen Date: Sun, 5 Jul 2015 14:41:03 +0200 Subject: Add method call assertions for internal use. Add `assert_called` and `assert_not_called` to boil down the boilerplate we need to write to assert methods are called certain number of times. --- .../testing/method_call_assertions.rb | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 activesupport/lib/active_support/testing/method_call_assertions.rb (limited to 'activesupport/lib/active_support') diff --git a/activesupport/lib/active_support/testing/method_call_assertions.rb b/activesupport/lib/active_support/testing/method_call_assertions.rb new file mode 100644 index 0000000000..0d7d62341c --- /dev/null +++ b/activesupport/lib/active_support/testing/method_call_assertions.rb @@ -0,0 +1,30 @@ +module ActiveSupport + module Testing + module MethodCallAssertions # :nodoc: + private + def assert_called(object, method_name, message = nil, times: 1) + times_called = 0 + + object.stub(method_name, -> { times_called += 1 }) { yield } + + error = "Expected #{method_name} to be called #{times} times, " \ + "but was called #{times_called} times" + error = "#{message}.\n#{error}" if message + assert_equal times, times_called, error + end + + def assert_called_with(object, method_name, args = [], returns: nil) + mock = Minitest::Mock.new + mock.expect(:call, returns, args) + + object.stub(method_name, mock) { yield } + + mock.verify + end + + def assert_not_called(object, method_name, message = nil, &block) + assert_called(object, method_name, message, times: 0, &block) + end + end + end +end \ No newline at end of file -- cgit v1.2.3