我在我的 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...>
这看起来是一个问题,当进程终止时数据库连接仍然处于打开状态,因此它不会优雅地死掉。但我不确定如何处理这个问题。
有关如何防止此错误的任何建议?