Rob*_*des 4 session unit-testing clojure ring
我正在尝试使用ring.mock.request使用“假”会话数据对环应用程序进行单元测试。但查看其文档似乎没有该功能。
在真正的应用程序中,我使用ring.middleware.session包装器:
(defroutes routes
(GET "/transactions" [{session :session}]
(response (str "Hello " (:username session)))))
(def app
(wrap-session routes))
Run Code Online (Sandbox Code Playgroud)
在我的测试中:
(app (ring.mock.request/request :get "/transactions"))
Run Code Online (Sandbox Code Playgroud)
但我有点困惑在哪里为我的请求添加这个“假”会话数据(例如(ring.mock.request/request :get "/transactions" :session {:username "foo"})。
您可以为此使用橄榄石。重要特点:
peridot 设计为与 -> 一起使用,并在线程中跨请求维护 cookie。
(-> (peri/session app)
(peri/request "/session-setter") ;; this would be the route that *sets* the session value
(peri/request "/transactions"))
Run Code Online (Sandbox Code Playgroud)
/session-setter我添加的路线在哪里,只是为了在您的会话中设置一个值:
(GET "/session-setter" []
{:status 200
:body "OK"
:session {:username "Roberto"}})
Run Code Online (Sandbox Code Playgroud)
最终你应该得到一个像这样的地图(为了简洁起见,我删除了一些键):
{:response {:status 200,
:headers {...},
:body "Hello Roberto"},
:request {...},
:cookie-jar {"localhost" {"ring-session" {:value "04110b66-1281-4e88-9470-546911e21ca1",
:path "/",
:domain "localhost",
:raw "ring-session=04110b66-1281-4e88-9470-546911e21ca1",
:http-only true}}}}
Run Code Online (Sandbox Code Playgroud)
请注意,在响应中,我们现在看到:body "Hello Roberto"哪个是使用会话密钥构建的:username。
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |