Rubyミニテストフレームワークで特定のメソッドが呼び出されていることをアサートするにはどうすればよいですか?

概要

minitest Ruby を使用して関数が他の関数を適切に呼び出すかどうかをテストしたいのですが、ドキュメントからテストするための適切なアサートが見つかりません。

class SomeClass
  def invoke_function(name)
    name == "right" ? right () : wrong ()
  end

  def right
    #...
  end

  def wrong
    #...
  end
end
describe SomeClass do
  it "should invoke right function" do
    # assert right() is called
  end

  it "should invoke other function" do
    # assert wrong() is called
  end
end

解決策

Minitest には、何らかのメソッドが呼び出されているかどうかを確認するための特別な .expect :call があります。

describe SomeClass do
  it "should invoke right function" do
    mocked_method = MiniTest::Mock.new
    mocked_method.expect :call, return_value, []
    some_instance = SomeClass.new
    some_instance.stub :right, mocked_method do
      some_instance.invoke_function("right")
    end
    mocked_method.verify
  end
end

残念ながら、この機能はあまり文書化されていません。私はここからそれについて見つけました: https://github.com/seattlerb/minitest/issues/216