【发布时间】:2016-04-01 07:38:53
【问题描述】:
如何让这个测试通过:
(ns imp-rest.parser-test-rest
(:require [clojure.test :refer :all])
(:require [ring.mock.request :as mock] )
(:require [imp-rest.web :as w]))
(deftest test-parser-rest
(testing "put settings"
(w/app
(mock/request :put "/settings/coordinateName" "FOO" ))
(let [response (w/app (mock/request :get "/settings"))]
(println response )
(is (= (get (:body response) :coordinateName) "FOO")))))
它失败了:
FAIL in (test-parser-rest) (parser_test_rest.clj:30)
put settings
expected: (= (get (:body response) :coordinateName) "FOO")
actual: (not (= nil "FOO"))
这是我的处理程序:
(ns imp-rest.web
(:use compojure.core)
(:use ring.middleware.json-params)
(:require [clj-json.core :as json])
(:require [ring.util.response :as response])
(:require [compojure.route :as route])
(:require [imp-rest.settings :as s]))
(defn json-response [data & [status]]
{:status (or status 200)
:headers {"Content-Type" "application/json"}
:body (json/generate-string data)})
(defroutes handler
(GET "/settings" []
(json-response (s/get-settings)))
(GET "/settings/:id" [id]
(json-response (s/get-setting id)))
(PUT "/settings" [id value]
(json-response (s/put-setting id value)))
(route/not-found "Page not found") )
(def app
(-> handler
wrap-json-params))
暴露了这个地图(设置):
(ns imp-rest.settings)
(def settings
(atom
{:coordinateName nil
:burnin nil
:nslices nil
:mrsd nil
}))
(defn get-settings []
@settings)
(defn get-setting [id]
(@settings (keyword id)))
(defn put-setting [id value]
(swap! settings assoc (keyword id) value)
value)
和入口点:
(ns imp-rest.core
(:use ring.adapter.jetty)
(:require [imp-rest.web :as web]))
(defn -main
"Entry point"
[& args]
(do
(run-jetty #'web/app {:port 8080})
);END;do
);END: main
现在当我'lein run'时,我可以发出这样的(工作)请求:
curl -X PUT -H "Content-Type: application/json" \
-d '{"id" : "coordinateName", "value" : "FOO"}' \
http://localhost:8080/settings
这是我试图用测试来模拟的。任何帮助表示赞赏。
【问题讨论】:
-
URL 中的
PUT /settings work? Does it haveid` 应该如何或作为 JSON 请求正文的一部分? -
理想情况下按 URL 标识,例如浏览到localhost:8080/settings/coordinateName 给出“FOO”。
-
我修复了你的非惯用格式,尤其是。关于括号的位置。可能您使用的编辑器无法帮助您查看代码的结构并迷失在括号中。尝试使用一个可以帮助您的。还要尝试坚持通常的格式约定(例如右括号前没有空格),以便人们更容易看到结构 - 您很快就会习惯于自己查看没有括号的结构。