Учусь тестить в Эликсире и вот такая проблема появилась:
Когда я запускаю следующий тест, иногда он проходит, а иногда нет, я думаю, что это связано с тем, что у супервизора нет времени перезапустить GenServer:
test "Supervisor will revive the dead gensever" do
{:ok, pid} = KV.Supervisor.start_link([])
KV.RegistryClient.create KV.RegistryClient, "wallet"
[h | _] = Supervisor.which_children(pid)
{KV.RegistryClient, pid_reg, _, _} = h
send(pid_reg, :insta_kill)
assert %{active: 1} = Supervisor.count_children(pid)
end
Когда происходит, это ошибка:
1) test Supervisor will revive the dead gensever (KV.RegistryTest)
test/kv/registry_test.exs:35
match (=) failed
code: assert %{active: 1} = Supervisor.count_children(pid)
right: %{active: 0, specs: 1, supervisors: 0, workers: 1}
stacktrace:
test/kv/registry_test.exs:41: (test)
Как предотвратить это? Тайм-аут - хороший подход?
ExUnit
не предоставляет удобного способа протестировать его именно потому, что никто не должен тестировать внутренности OTP. - person Aleksei Matiushkin   schedule 23.05.2019