如何从`lein test`输出成功的测试?

时间:2018-01-08 16:18:07

标签: unit-testing clojure clojure-testing

使用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中重写报告函数,但我想尽可能避免这种情况。

3 个答案:

答案 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屏幕截图,其中包含失败报告:

enter image description here

答案 2 :(得分:0)

我已经多次搜索该问题的答案,所以这里是一个完整的解决方案,它使用Test Report构建在@ ivan-grishaev的提示上:

Test Report挂接到clojure.test中,以提供自定义报告程序,然后将其与在测试运行中发生的每个事件一起运行。这些事件作为称为“消息”的地图传递。最小的示例仅将clojure.pprint/pprint应用于消息,但这只能使您步入正轨。这里有一些代码可以让您感觉如何编写自定义报告器。 indenting-reporter使测试名称空间deftesttesting 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

您现在可以为输出添加颜色。