Fork me on GitHub
#clojure-russia
<
2018-03-09
>
rende1115:03:21

Всем привет, делаю простенький 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 но там я не увидел нужного(

igrishaev15:03:31

1) кажется, нет их в compojure 2) есть специальная функция body, которая заполняет тело из словаря (-> (request :post "/items") (body {:login "test" :password "123"))

rende1115:03:01

отправляю курлом

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")))