投稿

Minitestで"No more expects available for :something_method"が発生

Minitestで"No more expects available for :something_method"が発生

Minitestで"No more expects available for :something_method"が発生

Minitest::Mock で expect した回数より多くメソッドが呼ばれると No more expects available for :xxx が発生する。「誤り」の例では info の expect を1回しか登録していないため、2回目の呼び出しでエラーになる。「正解」のように呼ばれる回数だけ expect をチェーンして登録すると解消する。

誤り

def test_method
  Rails.logger.info('one')
  Rails.logger.info('two') #<= raise
end

logger_mock = Minitest::Mock.new
info_mock = logger_mock.expect(:info, true, ['one'])
Rails.logger = logger_mock

test_method <= No more expects available for :info

正解

logger_mock = Minitest::Mock.new
info_mock = logger_mock.expect(:info, true, ['one']).expect(:info, true, ['two'])
Rails.logger = logger_mock

ruby - Minitest: No more expects available - Stack Overflow