我的测试中有这段代码
setup do
client = Exredis.start
on_exit fn ->
client |> Exredis.query ["FLUSHALL"]
end
{:ok, client: client}
end
当我运行混合测试时,我永远不会得到一个错误,说匿名函数关闭时客户端的进程不存在。测试将继续运行,我的测试将无法认为它清除了我的Redis。
另一方面,如果您尝试在未使用的进程上运行Exredis.query,则会出现Exit错误。
答案 0 :(得分:3)
on_exit/1
回调在与测试过程不同的进程上运行。理论上这就是为什么查询应该有效,如果没有,那么你需要调查exredis
。
一些建议:
如果你有很多需要连接的测试,我会在test_helper.exs中启动一个命名连接并在我的测试中使用它:
Exredis.start(name: MyApp.Redis)
不确定Exredis
是否支持上述语法
我建议你使用redix,它有一个更惯用的Elixir API。例如,在Elixir的约定中,start
应始终返回{:ok, pid}
。但是,尽管如此,图书馆不应该像exredis那样推广使用start
函数,因为这意味着你可以留下悬空的Redis连接。你应该真的使用start_link
请记住,不要将依赖Redis的测试标记为async: true
,因为它们之间存在竞争条件