Всем привет, делаю простенький CRUD для ознакомления с языком и есть такие вопросы, может кто подскажет : 1) Для роутинга использую Compojure, но не пойму как там сделать марштуры именнованными? Нашел https://github.com/montoux/namedroutes , но она выглядит старой и не все поддерживает, есть альтернативы? 2) Не пойму как протестировать маршрут в форме создания записи - ("/items" POST), я использую ring.mock.request Вот мои "мысли"
(deftest items-post-test
(let [{ status :status headers :headers } (app-routes (-> (mock/request :post "/items" {:input "test"})))]
(is (= 302 status))))
Но я не пойму как правильно передать body? 3м параметром у меня не поучилось, нашел такие примеры - https://github.com/weavejester/ring-mock/blob/master/test/ring/mock/test/request.clj но там я не увидел нужного(1) кажется, нет их в compojure
2) есть специальная функция body, которая заполняет тело из словаря
(-> (request :post "/items") (body {:login "test" :password "123"))
отправляю курлом
curl -d "input=test" localhost:5005/items
получаю в логах
INFO: Finished :post /items for 127.0.0.1 in (89 ms) Status: 302 redirect to /
Проверяю в тесте
(app-routes (-> (mock/request :post "/items") (mock/body {:input "tost"})))
И получаю другой результат - страницу с формой создания записи, и лог из маршрута что пришел nil в поле input. Что я делаю не так?
Вот форма
(form-to ["POST" "/items"]
(label :text "Text:")
(text-field :input)
[:p errors]
[:button {:type "submit"} "Send"])]
вот обработчик
(POST "/items" [input]
(if-not (empty? input)
(do
(items-db/record input)
(redirect "/"))
(items-view/create-item "empty input")))
@rende11 https://github.com/weavejester/ring-mock/blob/master/src/ring/mock/request.clj#L56