Я только что закончил свои первые шесть недель работы с Clojure, и пока я очень доволен этим языком. Я развиваю свой личный блог с leiningen и PostgreSQL. Я уже могу публиковать новый контент, загружать файлы, и у меня есть сеансы, файлы cookie и роли, в любом случае, я думаю, что на данный момент у меня достаточно кода, чтобы начать беспокоиться о разделе тестирования, но я немного застрял, так как выглядит много что-то происходит на стороне тестирования и спецификации clojure.
Итак, у меня есть эта функция:
(defn download
"GET /admin/uploads/download/:id"
[params]
(let [id (-> params :id)
upload (model-upload/get-upload id)
filename (:filename upload)
body (clojure.java.io/file (str "public/uploads/" filename))]
{:status 200
:body body
:headers {"Content-Type" "application/pdf"
"Content-Length" (str (.length body))
"Cache-Control" "no-cache"
"Content-Disposition" (str "attachment; filename=" filename)}}))
Функция принимает карту в качестве аргумента и предоставляет окончательную карту для отправки и обработки compojure. Я пришел из мира Rails, поэтому способ протестировать эту функцию в Rails состоял бы в том, чтобы создать класс FactoryGirl, создать файл модели Rspec с классическим:
expect(first_map).to eq(map_returned_by_function)
в нем сравнивая ожидаемое, а затем запускать rspec из командной строки, чтобы получить зеленую или красную строку.
Со вчерашнего дня я пытаюсь воспроизвести этот процесс с помощью Clojure, используя этот документ:
https://www.codesai.com/2018/03/kata-generating-bingo-cards
но я думаю, что еще нет «стандартного» способа выполнить тест, включая часть БД (CRUD) в Clojure. Я даже не знаю, куда положить файлы спецификации. Я вижу библиотеки Clojure, похожие на FactoryGirl, но я не знаю, должен ли я создавать свои собственные структуры данных со спецификацией, поэтому я не уверен, с чего начать, есть clojure.test.check.generators и генераторы спецификаций, но я не знаю узнайте, отличаются ли они или мне следует использовать только спецификацию, но не clojure.test.check. Могу ли я запустить тест из командной строки, а не внутри REPL?
Я имею в виду: есть ли документ или учебник о том, как протестировать набор функций CRUD? Я думаю, что мне просто нужен начальный HOWTO, а затем я мог бы взять его оттуда и написать учебник для новичков, таких как я.
ОБНОВЛЕНО:
Похоже, Midje - это то, что я ищу:
https://github.com/marick/Midje/wiki/A-tutorial-introduction