在使用Elixir进行测试时,分配给GenServer的dB连接是否可以重新分配给测试服务器



我的系统有一个保护伞下的应用程序,它启动了几个GenServers,这些GenServers在init上进行一些dB调用,从而获得自己的连接。

问题在于,在我对控制器的测试中,我将一些记录插入到dB中,控制器调用其中一个GenServers,然后执行更多的dB查询。 但由于它是一个不同的沙盒,它看不到记录。

我正在寻找一种解决方案,该解决方案将允许现有的正在运行的GenServers使用与测试相同的沙箱。 我将非常感谢任何想法。 我尝试在测试设置中的沙盒结帐后立即添加以下内容,但没有帮助:

Ecto.Adapters.SQL.Sandbox.allow(MyApp.Repo, self(), Some.GenServer)

我发现的唯一可行的解决方案是允许使用备用名称启动GenServer,从而使用与测试相同的沙箱数据库连接启动它,让我的控制器使用这个不同名称的版本,并在测试结束前关闭它。

似乎我最终遇到了同样的问题。我的解决方案是保留默认的 Phoenix 设置,并在每次测试之前终止并重新启动我的进程,如下所示:

setup(%{conn: conn}) do
    Supervisor.terminate_child(Some.Supervisor, Some.GenServer)
    Supervisor.restart_child(Some.Supervisor, Some.GenServer)
    {:ok, conn: conn}
end

测试不应该是异步的:true

最新更新