我的系统有一个保护伞下的应用程序,它启动了几个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