У меня есть тест в моем приложении Phoenix, который тестирует подписчика Phoenix.PubSub
, использующего Genserver. Подписчик выполняет некоторую работу с базой данных как часть своего handle_info/2
.
test "sending creating a referral code upon user registration" do
start_supervised(MyApp.Accounts.Subscriber)
user = insert(:user)
Phoenix.PubSub.broadcast(MappApp.PubSub, "accounts", {:register, user})
assert_eventually(Repo.exists?(ReferralCode))
stop_supervised(MyApp.Accounts.Subscriber)
end
Запуск этого тестового модуля сам по себе — это нормально. Однако, когда я запускаю весь свой набор тестов, я получаю такую ошибку (тест все еще проходит):
[error] GenServer MyApp.Accounts.Subscriber terminating
** (stop) exited in: DBConnection.Holder.checkout(#PID<0.970.0>, [log: #Function<9.124843621/1 in Ecto.Adapters.SQL.with_log/3>, cache_statement: "ecto_insert_referral_codes", timeout: 15000, pool_size: 10, pool: DBConnection.Ownership])
** (EXIT) shutdown: "owner #PID<0.969.0> exited"
<stacktrace...>
Похоже, это проблема с подключением к базе данных, которое все еще открыто, когда процесс завершается, поэтому он не умирает изящно. Но я не знаю, как с этим справиться.
Любые советы о том, как предотвратить эту ошибку?
async: true
? Если да, то это может быть виновником. - person zwippie   schedule 25.11.2020use
работаю сModelCase
модулем. Это поведение по умолчанию? - person harryg   schedule 25.11.2020use ModelCase
(а неuse ModelCase, async: true
), то тесты в модуле не будут выполняться одновременно с тестами в других модулях, что, вероятно, вам и нужно. (Хотя я не знаю, как выглядит ваш ModelCase) - person zwippie   schedule 25.11.2020DataCase
в текущем Phoenix: github .com/phoenixframework/phoenix/blob/master/installer/). - person harryg   schedule 25.11.2020async: false
и без него, и возникает одна и та же ошибка. Я думаю, чтоModelCase
запускает тест неасинхронно - person harryg   schedule 25.11.2020