我的测试中有这段代码
setup do
client = Exredis.start
on_exit fn ->
client |> Exredis.query ["FLUSHALL"]
end
{:ok, client: client}
end
当我运行 mix test 时,我永远不会收到错误消息,说匿名函数的闭包上不存在客户端进程。测试将继续运行,我的测试将失败,因为它会清除我的 Redis。
另一方面,如果您曾尝试在不存在的进程上运行 Exredis.query,您将收到 Exit 错误。
最佳答案
on_exit/1
回调在与测试进程不同的进程上运行。这就是理论上为什么查询应该起作用的原因,如果不起作用,那么您需要调查 exredis
.
一些忠告:
Exredis.start(name: MyApp.Redis)
不确定是否
Exredis
支持以上语法 start
应该总是返回 {:ok, pid}
.但是,即使如此,图书馆也不应该提倡使用 start
像 exredis 一样的功能,因为这意味着你可以留下悬空的 Redis 连接。你真的应该使用 start_link
async: true
,因为它们之间会有竞争条件 关于elixir - 为什么这个 Exredis 客户端不会在 on_exit 回调中抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33197108/