Запустите один тест Clojure (не все тесты в пространстве имен) с приборами из REPL
Как запустить один тест (не целое пространство имен) из Clojure REPL?
Я пытался вызвать функцию напрямую, например (the-ns/the-test)
но мне нужны светильники для запуска в первую очередь. Поэтому я хочу найти способ начать тестирование с clojure.test
,
Это близко, но не подходит для того, что я хочу сделать: /questions/18892311/vyipolnite-testyi-ot-clojure-repl-i-leiningen/18892318#18892318
Я не вижу упоминаний о том, как это сделать из API clojure.test.
4 ответа
В Clojure 1.6 была добавлена новая функция для поддержки этого. clojure.test / test-vars будет запускать один или несколько тестовых переменных с фиксаторами.
Я думаю, что-то вроде этого должно работать:
(clojure.test/test-vars [#'the-ns/the-test])
Чтобы запустить один тест в пространстве имен:
lein test :only namespace_name/testname
Чтобы запустить все тесты в одном пространстве имен
lein test :only namespace_name
Если вы не возражаете против использования приборов, вы можете сделать следующее, прежде чем позвонить 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
Хорошая альтернатива clojure.test (если вы в порядке, добавьте дополнительные зависимости eftest
). Эта библиотека является альтернативным раннером (она совместима с clojure.test). Он имеет гибкие селекторы тестов (т.е. по папке, по пространству имен, по var).
В REPL вы можете выполнить что-то вроде этого:
(require '[eftest.runner :refer [find-tests run-tests]])
(run-tests (find-tests #'foo.bar/baz))