Jum*_*p3r 9 testing logging elixir
我想知道如何在测试时禁用Elixir中的日志记录.在我当前的代码中,我测试记录器消息,所以我不想完全禁用它,但隐藏消息直到任何测试停止传递.
我正在使用mix和ExUnit来管理和测试我的项目.
mix test
Compiling 2 files (.ex)
.........
17:59:18.446 [warn] Code seems to be empty
.
17:59:18.447 [warn] Code doesn't contain HLT opcode
.
17:59:18.448 [warn] Code doesn't contain HLT opcode
17:59:18.448 [error] Label error doesn't exist
.....
Finished in 0.07 seconds
16 tests, 0 failures
Run Code Online (Sandbox Code Playgroud)
Kel*_*all 14
使用ExUnit.CaptureLog
:
import ExUnit.CaptureLog
test "example" do
assert capture_log(fn ->
Logger.error "log msg"
end) =~ "log msg"
end
Run Code Online (Sandbox Code Playgroud)
或者,如果您只是想忽略任何日志,那么:
@tag capture_log: true
test "example" do
Logger.error "log msg"
end
Run Code Online (Sandbox Code Playgroud)
在您的config/test.exs
文件中为记录器输入以下配置:
config :logger, level: :error
Run Code Online (Sandbox Code Playgroud)
如果您没有特定于环境的配置,请在以下行中添加以下内容config/config.exs
:
config :logger, level:
case Mix.env do
:test -> :error
_ -> :info
end
Run Code Online (Sandbox Code Playgroud)
另一个选择是使用另一个后端来记录日志消息(假设{:logger_file_backend, "~> 0.0"}
包含在deps
部分中mix.exs
):
config :logger,
compile_time_purge_level: :debug,
format: "$date $time $metadata[$level] $message\n",
metadata: [:application, :module, :function, :file, :line],
backends: [{LoggerFileBackend, :info_warn_error}]
config :logger, :info_warn_error,
path: "log/info_warn_error.log", # or "/dev/null"
level: :warn
Run Code Online (Sandbox Code Playgroud)
我remove_backend()
在 Logger 的文档中发现了函数,所以在Logger.remove_backend(:console)
应该禁用Logger 的文件中使用后
,所有记录的消息都消失了(顺便说一下,测试正在通过)。
编辑:我问了 Logger 开发人员这个问题。显然,@moduletag :capture_log
在测试之上使用比删除后端更好。无论如何,工作,对我来说很好。
归档时间: |
|
查看次数: |
2694 次 |
最近记录: |