2015-10-18 46 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的測試,你就會有他們

之間的競爭條件
相關問題