Functionality to capture logs for testing.
defmodule AssertionTest do use ExUnit.Case import ExUnit.CaptureLog require Logger test "example" do assert capture_log(fn -> Logger.error("log msg") end) =~ "log msg" end test "check multiple captures concurrently" do fun = fn -> for msg <- ["hello", "hi"] do assert capture_log(fn -> Logger.error(msg) end) =~ msg end Logger.debug("testing") end assert capture_log(fun) =~ "hello" assert capture_log(fun) =~ "testing" end end
Captures Logger messages generated when evaluating fun
.
capture_log(keyword(), (() -> any())) :: String.t()
Captures Logger messages generated when evaluating fun
.
Returns the binary which is the captured output.
This function mutes the :console
backend and captures any log messages sent to Logger from the calling processes. It is possible to ensure explicit log messages from other processes are captured by waiting for their exit or monitor signal.
Note that when the async
is set to true
, the messages from another test might be captured. This is OK as long you consider such cases in your assertions.
It is possible to configure the level to capture with :level
, which will set the capturing level for the duration of the capture, for instance, if the log level is set to :error any message with the lower level will be ignored. The default level is nil
, which will capture all messages. The behaviour is undetermined if async tests change Logger level.
The format, metadata and colors can be configured with :format
, :metadata
and :colors
respectively. These three options defaults to the :console
backend configuration parameters.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/ex_unit/1.11.2/ExUnit.CaptureLog.html