当行为依赖于Application.get_env / 3时,如何测试模块?

时间:2015-05-23 10:18:23

标签: testing elixir mix

我正在创建一个带有模块的库,当use'注入一些依赖于目录内容的函数时,我想用不同的目录测试行为。目前,我通过应用程序配置Application.get_env/3获取目录的路径。

如果我正在更改目录Application.put_env/4,这意味着我的测试必须按顺序运行,因为这是一个有效的全局值,对吗?

我可以将呼叫存根到Application.get_env/3吗?或者我应该以另一种方式传递价值? (例如通过use宏)

1 个答案:

答案 0 :(得分:1)

最简单的方法是将值作为参数传递。您的模块可能依赖于Application.get_env仅缺少传入的值。类似的东西:

Application.put_env(MyApplication, :some_key, "hello")

defmodule Test do
  def test(string \\ Application.get_env(MyApplication, :some_key)) do
    IO.inspect(string)
  end
end

# Default behaviour    
Test.test           # => "hello"

# In your tests
Test.test("world")  # => "world"