0

私は 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")))
4

1 に答える 1

0

答えを得た、リング ハンドラー関数 deroutes 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")))
于 2016-02-18T13:34:54.653 に答える