Синтаксис вывода Ruby minitest assert

Я новичок в minitest и все еще новичок в ruby и действительно устал от попыток google этот вопрос без результата. Я был бы очень благодарен за помощь:

каков точный синтаксис assert_output в ruby minitest?

все, что я нахожу на github или в другом месте, похоже, использует круглые скобки. Тем не менее, я получаю сообщение об ошибке, когда я не использую блок с assert_output, что имеет смысл, поскольку определение этого метода содержит оператор yield.

но я не могу сделай так, как я хочу.

testclass.rb

class TestClass
  def output
    puts 'hey'
  end
end

test_test.rb

require 'minitest/spec'
require 'minitest/autorun'
require_relative 'testclass'


class TestTestClass < MiniTest::Unit::TestCase 
  def setup
    @test = TestClass.new
  end

  def output_produces_output
    assert_output( stdout = 'hey' ) { @test.output}
  end   
end 

что я получаю это:

законченные тесты в 0.000000 с, тестах Нан / с, утверждениях НАН

0 тесты 0 ассерт, 0 сбоев, 0 ошибок, 0 пропускает

что я делаю не так? Это должно быть что-то совершенно очевидное, но я не могу понять. Спасибо за помощь.

1 ответов


для запуска вашего метода тестирования имя метода должно начинаться с test_. Также, как assert_output works заключается в том, что блок будет писать в stdout/stderr, и аргументы будут проверены, если они соответствуют stdout/stderr. Самый простой способ проверить это IMO-пройти в регулярном выражении. Так вот как я бы написал этот тест:

class TestTestClass < MiniTest::Unit::TestCase 
  def setup
    @test = TestClass.new
  end

  def test_output_produces_output
    assert_output(/hey/) { @test.output}
  end   
end