2015-10-18 59 views
3

我有这样的代码在我的测试为什么此Exredis客户端不会在on_exit回调中抛出错误?

setup do 
    client = Exredis.start 

    on_exit fn -> 
    client |> Exredis.query ["FLUSHALL"] 
    end 

    {:ok, client: client} 
end 

当我运行混合测试,我将永远不会得到一个错误说客户端的过程中的匿名功能的关闭不存在。测试将继续运行,我的测试会认为它会清除我的Redis。另一方面,如果您尝试在一个不存在的进程上运行Exredis.query,则会出现Exit错误。

回答

2

on_exit/1回调运行在与测试过程不同的过程中。这在理论上是为什么查询应该起作用,如果它不起作用,那么您需要调查exredis

几点建议:

  1. 如果您有需要连接很多测试,我将开始内部test_helper.exs命名的连接,并在我的测试中使用它:

    Exredis.start(name: MyApp.Redis) 
    

    不知道如果Exredis支持上述语法

  2. 我建议您使用redix,它有一个更习惯的Elixir API。例如,在Elixir公约中,start应该总是返回{:ok, pid}。但即使如此,图书馆也不应该像exredis那样推广使用start函数,因为这意味着您可以离开Redis连接。你真的应该使用start_link

  3. 记住没有注意到依靠Redis的为async: true的测试,你就会有他们

之间的竞争条件
相关问题