使用clojure.test,在运行lein test
时,默认设置只打印断言的数量,例如"包含19个断言的Ran 12测试,"失败测试的详细信息以及测试的命名空间。我想要成功测试的输出,所以我可以看到实际运行的测试。 JS中的Mocha等框架默认具有此行为。
例如,如果通过以下测试:
(deftest aTest
(testing "Simple test"
(is (= 1 1))))
我想输出(格式化是任意的):
Testing <namespace>
Passed: aTest -> Simple test
理想情况下,通过的测试也将采用颜色编码。
我查看了几个库,包括lein-test-refresh和humane-test-output,但是没有看到我需要的东西。另一个选项看起来像是在clojure.test中重写报告函数,但我想尽可能避免这种情况。
答案 0 :(得分:1)
我想你必须自己写。如果您想了解如何将现有deftest
用于自定义宏的示例,以下是一个示例from the Tupelo library,它会根据行号自动为deftest组选择“名称”:
(defmacro dotest [& body]
(let [test-name-sym (symbol (str "dotest-line-" (:line (meta &form))))]
`(clojure.test/deftest ~test-name-sym ~@body)))
(dotest
(is (= 5 (+ 2 3)))) ; works!
您只需添加println
和瞧!
答案 1 :(得分:1)
我记得,Eftest library在运行测试时提供了漂亮的彩色输出,你可以看看。
此外,标准clojure.test
框架支持添加您自己的报告。检查Test report库以获取参考。
可能在从编辑器或IDE运行测试时,它可以提供彩色输出。这是我的Cider驱动的Emacs屏幕截图,其中包含失败报告:
答案 2 :(得分:0)
我已经多次搜索该问题的答案,所以这里是一个完整的解决方案,它使用Test Report构建在@ ivan-grishaev的提示上:
Test Report挂接到clojure.test
中,以提供自定义报告程序,然后将其与在测试运行中发生的每个事件一起运行。这些事件作为称为“消息”的地图传递。最小的示例仅将clojure.pprint/pprint
应用于消息,但这只能使您步入正轨。这里有一些代码可以让您感觉如何编写自定义报告器。 indenting-reporter
使测试名称空间deftest
和testing
var缩进,并列出所有独立于测试结果的变量。
在您的项目中创建一个像这样的文件:
(ns my.own.test-reporter
(:require [clojure.pprint :refer [pprint]]
[clojure.test :as ct]
[clojure.core.match :refer [match]]))
(defn simple-reporter [msg]
(pprint msg))
(defn indenting-reporter [msg]
(match (:type msg)
:begin-test-ns (println (str "Testing " (:ns msg) "\n"))
:begin-test-var (println (str " " (-> msg :var meta :name)))
:pass (do (println (str " " (-> msg :context first) " :pass"))
(ct/inc-report-counter :pass))
:fail (do (println (str " " (-> msg :context first) " :fail"))
(ct/inc-report-counter :fail))
:error (do (println (str " " (-> msg :context first) " :error"))
(ct/inc-report-counter :error))
:end-test-ns (println)
:end-test-var ()
:summary (pprint msg)
:else (pprint msg)))
,然后在您的:test
的{{1}}个人资料中使用它:
project.clj
您现在可以为输出添加颜色。