2016-02-18 4 views
0

Я делаю тесты на моем приложении luminus, и я хочу проверить свой пост, как показано ниже. Однако данные отправляются в тело объекта запроса в виде байтового входного потока. Как сделать данные для публикации в ключе params объекта запроса? Я получил этот пример по этой ссылке http://www.jarrodctaylor.com/posts/Compojure-Address-Book-Part-1/test clojure luminus application with midje

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

Ваш вопрос действительно не имеет ничего общего с Миддже. Если у вас нет промежуточного программного обеспечения 'params' в' app', ': params' не будут заполнены. – muhuk

+0

, когда я выполняю свои обычные запросы, данные хранятся в ключе: params объекта запроса, поэтому я просто разбираю его с помощью (-> req: params: data), поэтому я не думаю, что это может быть проблемой. – joeabala

+0

Вы были правы @muhuk, много спасибо – joeabala

ответ

0

получил ответ, я связывание издеваться/запрос в функции обработчика кольца 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")))