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

GLe*_*Lee 5 unit-testing clojure clojure-testing

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

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

(deftest aTest
  (testing "Simple test"
      (is (= 1 1))))
Run Code Online (Sandbox Code Playgroud)

我想要一个类似的输出(格式是任意的):

Testing <namespace>
    Passed: aTest -> Simple test
Run Code Online (Sandbox Code Playgroud)

理想情况下,通过的测试也应该有颜色编码。

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

Ala*_*son 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!
Run Code Online (Sandbox Code Playgroud)

您只需添加 aprintln即可,瞧!