4

使用 clojure.test,在运行时lein test,默认设置仅打印出断言的数量,例如“Ran 12 tests contains 19 assertions”、失败测试的详细信息以及测试的命名空间。我也想要成功测试的输出,这样我就可以看到实际运行了哪些测试。JS 中的 Mocha 等框架默认具有此行为。

例如,如果以下测试通过:

(deftest aTest
  (testing "Simple test"
      (is (= 1 1))))

我想要这样的输出(格式是任意的):

Testing <namespace>
    Passed: aTest -> Simple test

理想情况下,通过的测试也将采用颜色编码。

我查看了一些库,包括 lein-test-refresh 和 humane-test-output,但没有看到我需要什么。另一个选项看起来像重写 clojure.test 中的报告函数,但如果可能的话,我想避免这种情况。

4

3 回答 3

1

我想你必须自己写。如果您想要一个如何将现有deftest的用于自定义宏的示例,这里是Tupelo 库中的一个示例,它根据行号自动为 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瞧!

于 2018-01-08T22:39:48.653 回答
1

我记得,Eftest 库在运行测试时提供了漂亮的彩色输出,你可以看看。

此外,标准clojure.test框架支持添加您自己的报告。检查测试报告库以获取参考。

可能,当从您的编辑器或 IDE 运行测试时,它可以提供彩色输出。这是我的 Cider 驱动的 Emacs 屏幕截图和失败报告:

在此处输入图像描述

于 2018-01-09T09:04:09.427 回答
0

我已经多次搜索这个问题的答案,所以这里是一个完整的解决方案,基于@ivan-grishaev 的使用测试报告的提示:

测试报告挂钩clojure.test以提供自定义报告器,然后在通过测试运行发生的每个事件时运行这些报告器。这些事件作为称为“消息”的映射传递。最小的例子只适用clojure.pprint/pprint于消息,但这只能让你到目前为止。这里有更多代码让您了解如何编写自定义报告器。indenting-reporter缩进测试命名空间、sdeftesttestingvars,并独立于测试结果列出它们。

在你的项目中创建一个这样的文件:

(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您的个人资料中使用它project.clj

:injections [(require '[my.own.test-reporter :as tr])]
:test-report {:reporters [tr/indenting-reporter]}

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

于 2018-11-27T19:13:59.293 回答