簡體   English   中英

從REPL運行一個Clojure測試(不是名稱空間中的所有測試)和fixtures

[英]Run one Clojure test (not all tests in a namespace), with fixtures, from the REPL

如何從Clojure REPL運行一個測試(不是整個命名空間)?

我試過直接調用函數,例如(the-ns/the-test)但我需要先運行fixtures。 所以我想找到一種方法從clojure.test開始測試。

這很接近但不符合我想做的事情: https//stackoverflow.com/a/24337705/109618

我沒有看到如何從clojure.test API中提取它。

Clojure 1.6中添加了一個新功能來支持這一功能。 clojure.test / test-vars將使用fixtures運行一個或多個測試變量。

我認為這樣的事情應該有效:

(clojure.test/test-vars [#'the-ns/the-test])

如果您不介意不運行燈具,則可以在調用run-tests之前執行以下操作:

(defn test-ns-hook []
  (my-test))

要刪除鈎子,你可以這樣做

(ns-unmap *ns* 'test-ns-hook)

如果你仍然需要你的燈具並希望繼續使用一個測試命名空間,你可以添加一個ns-unmap來刪除你不想從命名空間運行的所有測試/燈具,然后再運行你的測試建模:

(doseq [v (keys (ns-publics 'my-ns))]
  (let [vs (str v)]
    (if (.startsWith vs "test-") (ns-unmap 'my-ns v))))

使用多個名稱空間可能更容易,其中一個名稱空間包含所有測試和裝置,而在其他名稱空間中refer要從主要測試名稱空間運行的測試和裝置。 然后,您可以使用ns切換到特定的測試命名空間,或者通過run-tests您要run-tests的命名空間:

(ns test-main
  (:require [clojure.test :refer :all]))

(deftest addition
  (is (= 4 (+ 2 2)))
  (is (= 7 (+ 3 4))))

(deftest subtraction
  (is (= 1 (- 4 3)))
  (is (= 3 (- 7 4))))

(run-tests)
;Runs all the tests

(ns test-specific
(:require [clojure.test :refer :all]
          [test-main :refer :all]))

(deftest arithmetic
  (subtraction))

(run-tests)
;Just runs the tests you want

要在命名空間中運行單個測試:

lein test :only namespace_name/testname

在一個名稱空間中運行所有測試

lein test :only namespace_name

clojure.test的一個很好的替代方案(如果你可以添加額外的依賴項是eftest )。 這個庫是一個替代的跑步者(它與clojure.test兼容)。 它具有靈活的測試選擇器(即按文件夾,按名稱空間,按var)。

在REPL中,您可以執行以下操作:

(require '[eftest.runner :refer [find-tests run-tests]]) (run-tests (find-tests #'foo.bar/baz))

請參閱https://github.com/weavejester/eftest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM