用Midje测试Clojure Luminus应用



我正在对我的流明应用程序进行测试,我想测试我的后期功能,如下所示。但是,数据作为字节输入流发布在请求对象的正文中。如何使数据发布在请求对象的参数键上?我从这个链接中得到了这个例子 http://www.jarrodctaylor.com/posts/Compojure-Address-Book-Part-1/

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

得到答案,我在环形处理程序函数 defroutes 应用程序路由中绑定模拟/请求,而不是应用程序变量:

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

最新更新