Добавление юнит-тестов в инструменты CLI Clojure и deps.edn - PullRequest
0 голосов
/ 02 апреля 2020

Я привык использовать Clojure с Leiningen.

Но у меня есть новый проект, который я загрузил с LightMod. И он использует инструменты CLI и deps.

Это работает, но теперь я хочу добавить к нему некоторое модульное тестирование.

Итак, вот (немного упрощенная версия) мой файл deps.edn:

{:paths ["src" "resources"],
 :aliases
 {
  :dev
  {:extra-deps
   {orchestra #:mvn{:version "2018.12.06-2"},
    expound #:mvn{:version "0.7.2"},
    nightlight #:mvn{:version "RELEASE"},
    com.bhauman/figwheel-main #:mvn{:version "0.2.0"}},
   :main-opts ["dev.clj"]},

  :test
  {:extra-paths ["test"]
   :extra-deps {com.cognitect/test-runner {:git/url "https://github.com/cognitect-labs/test-runner.git"                                           :sha "209b64504cb3bd3b99ecfec7937b358a879f55c1"}}
   :main-opts ["-m" "cognitect.test-runner"]}

  :prod
  {:extra-deps
   {leiningen #:mvn{:version "2.9.0"},
    org.clojure/clojurescript #:mvn{:version "1.10.439"}},
   :main-opts ["prod.clj"]},

  :app
  {:extra-deps
   {
    markdown-clj {:mvn/version "1.10.1"}
    instaparse {
                :mvn/version"1.4.10"
                }
    ... MORE ...
}}}}

Теперь этот файл работает нормально с обоими компиляциями: dev и: prod.

Но теперь я только что добавил псевдоним: test.

И помещаю свои тесты в test / myns / core_tests.clj

Однако, когда я пытаюсь запустить тесты, я получаю это

Could not locate markdown/core__init.class, markdown/core.clj or markdown/core.cljc on classpath

Итак, моя интерпретация. В то время как ветки: dev и: prod успешно извлекают все зависимости в ветке: app. Тестовая ветвь не тянет в уценке. (И, вероятно, ни одна из других зависимостей, объявленных в: app

Так почему это должно быть? И как я могу явно сказать моему предложению: test, что ему нужно использовать все те же зависимости, которые используются в: dev и : прод

1 Ответ

0 голосов
/ 03 апреля 2020

Для этого вы можете использовать тестер Kaocha. Работающий шаблон проекта можно найти здесь . Он даже включает в себя возможность компилировать Java исходные файлы, а также Clojure.

Для начала настройте deps.edn примерно так

{:paths   ["src/clj"]
 :deps    {
           cambium/cambium.codec-simple {:mvn/version "0.9.3"}
           cambium/cambium.core         {:mvn/version "0.9.3"}
           cambium/cambium.logback.core {:mvn/version "0.4.3"}
           org.clojure/clojure          {:mvn/version "1.10.1"}
           prismatic/schema             {:mvn/version "1.1.12"}
           tupelo                       {:mvn/version "0.9.200"}
           }

 :aliases {:test {
                  :extra-deps  {lambdaisland/kaocha {:mvn/version "1.0-612"}}
                  }}
 }

и добавьте еще один файл tests.edn чтобы настроить Kaocha:

; ***** Be sure to use tagged reader literal '#kaocha/v1' *****
#kaocha/v1 {:tests
            [{:id          :unit
              :test-paths  ["test/clj"]
              :ns-patterns ["^tst..*"]
              }]
            ; :reporter kaocha.report.progress/report
            ; :plugins [:kaocha.plugin/profiling :kaocha.plugin/notifier]
            }

, затем создайте короткий сценарий оболочки для запуска Koacha в подкаталоге ./bin. Назовите его bin/kaocha с содержанием:

#!/bin/bash
clojure -A:test -m kaocha.runner "$@"

Теперь вы готовы к go! Тестовый файл:

(ns tst.demo.core
  (:use demo.core tupelo.core tupelo.test) )

(dotest
  (is= 5 (+ 2 3))
  (isnt= 9 (+ 2 3))
  (throws? (/ 1 0)) ; verify that an illegal operation throws an exception

  (is= 3 (add2 1 2))
  (throws? (add2 1 "two"))) ; Prismatic Schema will throw since "two" is not a number

; NOTE:  Clojure Deps/CLI can't handle Java source code at present

и мы отправляемся в гонки:

~/io.tupelo/clj-template > bin/kaocha 
[(.....)]
1 tests, 5 assertions, 0 failures.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...