用midje测试clojure luminus的应用

用midje测试clojure luminus的应用,clojure,midje,luminus,Clojure,Midje,Luminus,我正在对我的luminus应用程序进行测试,我想测试我的post功能,如下所示。但是,数据作为字节输入流发布在请求对象的主体上。如何将数据发布到请求对象的params键上?我从这个链接得到了这个例子 得到答案后,我在环处理程序函数defroutes app routes中绑定模拟/请求,而不是app var: (defroutes app-routes (GET "/" [] tests) (POST "/post" [] example-post)

我正在对我的luminus应用程序进行测试,我想测试我的post功能,如下所示。但是,数据作为字节输入流发布在请求对象的主体上。如何将数据发布到请求对象的params键上?我从这个链接得到了这个例子


得到答案后,我在环处理程序函数defroutes app routes中绑定模拟/请求,而不是app var:

(defroutes app-routes
           (GET "/" [] tests)
           (POST "/post" [] example-post)
           (not-found "invalid request"))

(def app
  (wrap-defaults app-routes (assoc-in site-defaults [:security :anti-forgery] false)))
正确的方法是:

 (fact "Test POST"
    (let [response (app (mock/request :post "/post" {:example-post "Some data"}))]
      (:status response) => 200
      (:body response) => "You posted: Some data")))
走错路

 (fact "Test POST"
    (let [response (app-routes (mock/request :post "/post" {:example-post "Some data"}))]
      (:status response) => 200
      (:body response) => "You posted: Some data")))

你的问题真的与Midje无关。如果在
app
中没有
params
中间件,
:params
将不会被填充。当我执行正常请求时,数据存储在请求对象的:params键中,所以我只使用(->req:params:data)解析它,所以我认为这可能不是问题。你是对的@muhuk,非常感谢
 (fact "Test POST"
    (let [response (app-routes (mock/request :post "/post" {:example-post "Some data"}))]
      (:status response) => 200
      (:body response) => "You posted: Some data")))