【问题标题】:testing clojure luminus application with midje使用 midje 测试 clojure luminus 应用程序
【发布时间】:2016-02-18 09:49:28
【问题描述】:

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

【问题讨论】:

  • 您的问题确实与Midje无关。如果app 中没有params 中间件,:params 将不会被填充。
  • 当我执行我的正常请求时,数据存储在请求对象的 :params 键中,所以我只是使用 (-> req :params :data) 解析它,所以我不认为这可能成为问题。
  • 你是对的@muhuk,非常感谢

标签: clojure midje luminus


【解决方案1】:

得到答案,我在环处理函数中绑定模拟/请求,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")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多