如何使用 Ring 测试会话状态?

Posted

技术标签:

【中文标题】如何使用 Ring 测试会话状态?【英文标题】:How to test session state with Ring? 【发布时间】:2013-03-05 19:44:58 【问题描述】:

我正在尝试使用 Ring + Compojure + lib-noir 进行 Clojure Web 开发,但我不知道如何测试会话状态。

【问题讨论】:

“测试会话状态”是指创建单元测试还是只是查看当前会话的内容? 【参考方案1】:

如果您的意思是单元测试,您可以使用binding,它将为变量创建新的绑定。

你可以查看一个很好的解释,可以找到here。

使用lib-noir 进行的示例单元测试

(ns your.test.core
  (:use [clojure.test])
  (:require [noir.session :as s]))


(binding [s/*noir-session* (atom )]
  ; store new sessions
  (s/put! "xxxx" :value "1234")
  (s/put! "my_session" :value "abcdefg")

  ; run tests
  (is (= :value "1234" (s/get "xxxx")))
  (is (= :value "abcdefg" (s/get "my_session"))))

您可以在此处查看noir.session 的source code。

【讨论】:

【参考方案2】:

我认为您可以模仿用于 ring 中实际会话测试的样式:https://github.com/ring-clojure/ring/blob/master/ring-core/test/ring/middleware/session/test/cookie.clj。

只需创建一个 cookie 存储,然后对其进行读/写,并断言处理程序会做出相应的响应。鉴于您也在使用 lib-noir,也许这个例子更合适:https://github.com/noir-clojure/lib-noir/blob/master/test/noir/session_test.clj。

【讨论】:

以上是关于如何使用 Ring 测试会话状态?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Appium 会话长时间保持活动状态

Compojure/Ring:为啥与 cookie-store 的会话在服务器重新启动后无法幸存?

如何使用会话状态模式:带有 VS2010 的 SQL Server

如何在会话存储在状态服务器(Web Garden)中的多线程中使用会话变量

如何在测试之间重复使用 Capybara 会话?

如何使用会话数组检查复选框