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 コードを調べてみると、 、 a 、およびvargs->margs
を受け取るプライベート関数で使用できることがわかりました。メッセージが含まれています(あなたの場合、入ってくるのはたとえば.?err
msg-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 は後の関数で例外をスローします。
このようにして、「印刷されます」が一度印刷され、「印刷されない」が印刷されないことが検証されます。