我的系统有一个伞下的应用程序启动了几个GenServers,它们在初始化时会进行一些dB调用,从而获得自己的连接。
问题在于,在我对控制器的测试中,我已经将一些记录插入到dB中,控制器会调用其中一个GenServers,然后再执行一些dB查询。但由于它是一个不同的沙箱,它没有看到记录。
我正在寻找一种通用的解决方案,允许现有的运行GenServer使用与测试相同的沙箱。我非常感谢任何想法。我尝试在测试设置中的沙箱结帐后立即添加以下内容,但没有帮助:
Ecto.Adapters.SQL.Sandbox.allow(MyApp.Repo, self(), Some.GenServer)
答案 0 :(得分:0)
我找到的唯一可行解决方案是允许GenServer以备用名称启动,启动它,因此使用与测试相同的沙箱数据库连接,让我的控制器使用这个不同命名的版本,然后将其关闭在测试结束之前。
答案 1 :(得分:0)
似乎我最终遇到了同样的问题。 我的解决方案是保留默认的Phoenix设置,并在每次测试之前终止并重新启动我的进程,如下所示:
setup(%{conn: conn}) do
Supervisor.terminate_child(Some.Supervisor, Some.GenServer)
Supervisor.restart_child(Some.Supervisor, Some.GenServer)
{:ok, conn: conn}
end
测试不应该是异步:true