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

时间:2017-02-08 21:49:36

标签: testing elixir sandbox ecto

我的系统有一个伞下的应用程序启动了几个GenServers,它们在初始化时会进行一些dB调用,从而获得自己的连接。

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

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

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

2 个答案:

答案 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