session - 在功能规范中登录和注销后访问会话
问题描述
我希望能够测试注销后会话无效。为此,我想检查登录后是否存在会话,并且我想获取会话详细信息。注销后会话不再存在。
我能想到的一种方法是在登录后检查会话是否存在于redis中,并且在注销后不存在于redis中。但我不知道该怎么做。
如果有其他方法可以尝试,请告诉我。
这是我到目前为止所拥有的:
scenario "session is invalidated on logout", js:true do
login_page.login('abcxyz@test.com', 'usfyguysgugy')
@user = User.find_by(email: 'abcxyz@test.com')
page.get_rack_session
end
但这会产生错误:
Failure/Error: page.get_rack_session
Capybara::ElementNotFound:
Unable to find visible xpath "//body/pre"
我也尝试过使用 redis.keys('*'),但没有成功。
任何有关如何访问会话的线索都会有所帮助。
解决方案
您正在编写功能规范,您不应该在这些类型的测试中直接访问 DB/redis/etc。功能测试都是关于测试用户能做什么和不能做什么,因此要验证注销结束会话,验证注销链接不再存在,并且登录链接现在存在。就像是
scenario "session is invalidated on logout", js:true do
login_page.login('abcxyz@test.com', 'usfyguysgugy')
click_link 'logout'
expect(page).not_to have_link('logout')
expect(page).to have_link('login')
end
如果您真的想验证存储在 redis 中的会话的详细信息,可以在控制器或请求规范中完成。
推荐阅读
- node.js - Twilio:如何通过nodejs购买号码?
- python - 将一些数据框值更改为 0
- python - 如何在 python 中编写排行榜?
- node.js - 运行突变后如何获得值?
- java - 带有 ConstraintLayout 的 ImageView 错误 Android Studio
- java - 单核处理器还能抛出 ConcurrentModificationException 吗?
- javascript - 如何防止 React 函数组件在异步请求期间闪烁
- java - 一些设备给出错误错误(无效的双值)
- php - 更改悬停 CSS 上的输入值
- android - Hilt ViewModel 构造函数在导航组件范围内不起作用