Compojure-api не уважающий тело от ring.mock.requests

Я пытаюсь использовать библиотеку ring.mock.requests для тестирования службы http. У меня есть этот кусок кода

   (auth-routes    
     (->
       (mock/request :post "/auth/user")
       (mock/body {:username "user" :password "pass"})
       (mock/content-type "application/json")))

Кажется, что внутренняя часть с макросом первого потока работает правильно, но она не работает, когда я пытаюсь сделать фиктивный запрос к auth-маршрутизации

И это мой маршрут:

(def auth-routes
  (context "/auth" []
  :tags ["Authentication"]
    (POST "/user" []
      :return s/Uuid
      :body [request m/User]
      :summary "Create new user"
      (ok (auth/create-user request)))) ...)

Это моя схема:

(def User {:username s/Str
           :password s/Str})

Исключение, которое я вижу,

clojure.lang.ExceptionInfo
   Request validation failed
   {:error (not (map? nil)), :type :compojure.api.exception/request-validation}

Похоже, мой маршрут становится nil как тело, и я ожидаю {:username "user" :password "pass"} быть здесь.

Что я делаю не так и как мне проехать тело по этому маршруту?

1 ответ

Решение

Я думаю, что вы должны сериализовать ваши данные в виде строки JSON в вашем тесте. Используя Чешир:

(cheshire.core/generate-string {:username "user" :password "pass"})

Посмотрите здесь или здесь.

Другие вопросы по тегам