如何在某些测试中隐藏日志但在其他测试中不隐藏?
How to hide logs in some tests but not in others?
背景
我的库根据 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 以及是否使用正确的值调用它:
问题
所以,鉴于此我有一些问题:
- 有没有办法在我 运行 测试时激活日志但不将它们输出到终端?
- 有没有办法只为我的测试套件中的某些测试激活日志?
声明ExUnit.setup/1
with a mandatory ExUnit.on_exit/2
to set the environment variable with 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
我没有测试,但应该可以。
为什么不继续使用 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
注意:如果你运行你的测试异步
你会遇到问题
背景
我的库根据 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 以及是否使用正确的值调用它:
问题
所以,鉴于此我有一些问题:
- 有没有办法在我 运行 测试时激活日志但不将它们输出到终端?
- 有没有办法只为我的测试套件中的某些测试激活日志?
声明ExUnit.setup/1
with a mandatory ExUnit.on_exit/2
to set the environment variable with 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
我没有测试,但应该可以。
为什么不继续使用 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
注意:如果你运行你的测试异步
你会遇到问题