Есть ли способ иметь приборы, специфичные для определенных тестов и не все в данном пространстве имен?
Как midje
давайте завернем facts
в with-state-changes
Форма для указания того, что конкретно должно выполняться до, вокруг или после них или содержимого, как это можно сделать с помощью clojure.test
1 ответ
Светильники в clojure.test - это функции, которые принимают функцию в качестве аргумента, выполняют настройку, вызывают функцию, а затем выполняют очистку.
тесты (созданные с помощью deftest) - это функции, которые не принимают аргументов и запускают соответствующие тесты.
Таким образом, чтобы применить прибор к тесту, вы просто оборачиваете этот тест в прибор.
user> (require '[clojure.test :refer [deftest is testing]])
nil
функция для проверки:
user> (def add +)
#'user/add
тест для этого:
user> (deftest foo (is (= (add 2 2) 5)))
#'user/foo
создайте прибор, который меняет математику, чтобы тест мог пройти:
user> (defn new-math-fixture [f]
(println "setup new math")
(with-redefs [add (constantly 5)]
(f))
(println "cleanup new math"))
#'user/new-math-fixture
без крепления тест не пройден:
user> (foo)
FAIL in (foo) (form-init5509471465153166515.clj:574)
expected: (= (add 2 2) 5)
actual: (not (= 4 5))
nil
и если мы изменим математику, наш тест в порядке:
user> (testing "new math"
(new-math-fixture foo))
setup new math
cleanup new math
nil
user> (testing "new math"
(deftest new-math-tests
(new-math-fixture foo)))
#'user/new-math-tests
user> (new-math-tests)
setup new math
cleanup new math
nil