我有一个根据disable_logging
的值记录消息的库:
unless Application.get(:my_app, :disable_logging, false), do:
Logger.info("Hello World!")
取决于MIX_ENV
,我为每个设置都有一个配置:
#test.config
use Mix.Config
config :my_app, disable_logging: true
这里的问题是我不想在测试结果中都记录日志消息。因此,自然地,我可以将disable_logging
设置为true并完成它。
但是,如果执行此操作,则无法测试是否正在调用Logger以及是否使用正确的值来调用它:
因此,鉴于此我有一些疑问:
答案 0 :(得分:1)
使用强制性的ExUnit.setup/1
声明ExUnit.on_exit/2
,以使用Application.put_env/4
设置环境变量。
setup do
Application.put_env(:my_app, :disable_logging, false)
on_exit fn ->
Application.put_env(:my_app, :disable_logging, true)
end
:ok
end
我没有测试它,但是它应该可以工作。
答案 1 :(得分:1)
为什么不继续使用ExUnit.CaptureLog
来抑制日志并只丢弃结果?
如果您有大量要登录到控制台的测试,并且不想对所有测试都这样做,则可以创建自定义ExUnit tag
,并结合@Aleksei的答案来完成此操作你。
在您的ExUnit.Case
模板中,添加以下内容:
setup tags do
if tags[:disable_logger] do
Application.put_env(:my_app, :disable_logging, false)
on_exit(fn ->
Application.put_env(:my_app, :disable_logging, true)
end)
end
:ok
end
现在,您只需为要禁用其日志记录的测试指定标签:
@tag disable_logger: true
test "something happens" do
# ...
end
注意:如果您异步运行测试,将会遇到此问题