用midje测试clojure luminus的应用
我正在对我的luminus应用程序进行测试,我想测试我的post功能,如下所示。但是,数据作为字节输入流发布在请求对象的主体上。如何将数据发布到请求对象的params键上?我从这个链接得到了这个例子用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)
得到答案后,我在环处理程序函数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")))