Запустите один тест Clojure (не все тесты в пространстве имен), с приборами, из REPL

Как выполнить один тест (не целое пространство имен) из Clojure REPL?

Я попытался вызвать функцию напрямую, например. (the-ns/the-test), но мне нужно, чтобы инструменты выполнялись первыми. Поэтому я хочу найти способ начать тесты с clojure.test.

Это близко, но не соответствует тому, что я хочу сделать: qaru.site/info/210435/...

Я не вижу упоминания о том, как это сделать из clojure.test API.

Ответы

Ответ 1

В поддержку Clojure 1.6 добавлена ​​новая функция. clojure.test/test-vars будет запускать один или несколько тестовых варов с приборами.

Я думаю, что что-то вроде этого должно работать:

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

Ответ 2

Если вы не возражаете против использования светильников, вы можете сделать следующее, прежде чем вы вызовете 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 пространство имен, которое вы хотите проверить:

(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