Почему форк выходов с ненулевым в тесте Minitest? - PullRequest
0 голосов
/ 25 декабря 2018

Это код:

require 'minitest/autorun'
class Foo < Minitest::Test
  def test_foo
    Process.fork do
      exit(0)
    end
    p Process.waitall
  end
end

Это вывод:

$ ruby a.rb
Run options: --seed 40445

# Running:

[[41827, #<Process::Status: pid 41827 exit 1>]]
.

Finished in 0.016218s, 61.6599 runs/s, 0.0000 assertions/s.
1 runs, 0 assertions, 0 failures, 0 errors, 0 skips

Почему код выхода не равен нулю?

Тот же код без Minitest работаетпросто отлично:

Process.fork do
  exit(0)
end
p Process.waitall

Что не так?

1 Ответ

0 голосов
/ 25 декабря 2018

https://github.com/seattlerb/minitest/issues/467

Проблема в том, что fork дублирует обработчики at_exit родительского процесса.Minitest использует at_exit для запуска тестов, поэтому вы противостоите этому.Из развилки документов: «Дочерний процесс может завершиться с использованием Kernel.exit!, чтобы избежать запуска каких-либо at_exit функций».

...