可以使用 Midje 的as-checker
先决条件来验证函数的输入。
当您打印data
进入的timbre/default-output-fn
(我通过您的 发现这个output-fn
)时,您会看到它具有以下结构:
{:hash_ #delay[{:status :pending, :val nil} 0x5ed805b1], :instant #inst "2016-10-14T17:07:16.779-00:00", :config {:level :info, ... .
所以日志级别在data
. 可以验证as-checker
如下log level
:
(fact "print info but not debug"
(core/init :info) => nil
(provided
(timbre/default-output-fn anything ; opts is first argument
(as-checker (fn [data]
(= (-> data :config :level) ; get log level
:info)))) ; validate that it is info
=> anything :times 1)
(provided
(timbre/default-output-fn anything
(as-checker (fn [data]
(= (-> data :config :level)
:debug))))
=> anything :times 0))
现在,您想检查消息的内容。不仅是日志级别。
opts
实际消息在或data
传递给 中不可用default-output-fn
。在 Timbre 代码中环顾四周,我看到它在一个私有函数vargs->margs
中可用,该函数需要一个?err
, amsg-type
和vargs
. vargs
包含消息(在您的情况下,例如:auto :p ["The message"])
.
通过该as-checker
方法,可以验证消息如下:
(fact "print Will be printed, not Won't be printed"
(core/init :info) => nil
(provided
(#'timbre/vargs->margs anything anything ["Will be printed"]) => {} :times 1)
(provided
(#'timbre/vargs->margs anything anything ["Won't be printed"]) => {} :times 0) )
注意vargs->margs
必须返回一个映射,否则 Timbre 会在后面的函数中抛出异常。
这样可以验证“将被打印”打印一次,而“不会被打印”永远不会打印。