method_call_assertions_test.rb 2.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
require 'abstract_unit'
require 'active_support/testing/method_call_assertions'

class MethodCallAssertionsTest < ActiveSupport::TestCase
  include ActiveSupport::Testing::MethodCallAssertions

  class Level
    def increment; 1; end
    def decrement; end
    def <<(arg); end
  end

  setup do
    @object = Level.new
  end

  def test_assert_called_with_defaults_to_expect_once
    assert_called @object, :increment do
      @object.increment
    end
  end

  def test_assert_called_more_than_once
    assert_called(@object, :increment, times: 2) do
      @object.increment
      @object.increment
    end
  end

  def test_assert_called_failure
    error = assert_raises(Minitest::Assertion) do
      assert_called(@object, :increment) do
        # Call nothing...
      end
    end

    assert_equal "Expected increment to be called 1 times, but was called 0 times.\nExpected: 1\n  Actual: 0", error.message
  end

  def test_assert_called_with_message
    error = assert_raises(Minitest::Assertion) do
      assert_called(@object, :increment, 'dang it') do
        # Call nothing...
      end
    end

    assert_match(/dang it.\nExpected increment/, error.message)
  end

  def test_assert_called_with
    assert_called_with(@object, :increment) do
      @object.increment
    end
  end

  def test_assert_called_with_arguments
    assert_called_with(@object, :<<, [ 2 ]) do
      @object << 2
    end
  end

  def test_assert_called_with_failure
    assert_raises(MockExpectationError) do
      assert_called_with(@object, :<<, [ 4567 ]) do
        @object << 2
      end
    end
  end

  def test_assert_called_with_returns
    assert_called_with(@object, :increment, returns: 1) do
      @object.increment
    end
  end

  def test_assert_not_called
    assert_not_called(@object, :decrement) do
      @object.increment
    end
  end

  def test_assert_not_called_failure
    error = assert_raises(Minitest::Assertion) do
      assert_not_called(@object, :increment) do
        @object.increment
      end
    end

    assert_equal "Expected increment to be called 0 times, but was called 1 times.\nExpected: 0\n  Actual: 1", error.message
  end
end