Compojure-api不尊重来自ring.mock.requests的正文

时间:2016-05-26 02:02:39

标签: clojure ring compojure-api

我正在尝试使用ring.mock.requests库来测试http服务。我有这段代码

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

带有线程优先宏的内部部分似乎工作正常,但是当我尝试将模拟请求设置为auth-routes时失败

这是我的路线:

(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 个答案:

答案 0 :(得分:1)

我认为您应该在测试中将数据序列化为json字符串。使用cheshire

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

看看herehere