【问题标题】:Changing the value of a session variable in RSpec/Capybara/Selenium在 RSpec/Capybara/Selenium 中更改会话变量的值
【发布时间】:2017-10-25 13:34:36
【问题描述】:

我开始使用 Rspec 和 Capybara 和 Selenium 为 Rails 应用程序编写功能规范来驱动浏览器。

在执行规范之一时,我想更改会话变量的值。例如:我想设置 session[:user_id]=123 以便我可以在我的应用程序中测试功能,而不必每次都通过登录屏幕。

当使用带有默认 rack_test 驱动程序的 Capybara 时, rack_session_access gem 用于访问会话。但是在使用 Selenium 驱动程序时似乎不起作用。

是的,这个问题一直是asked before,但没有给出满意的答案。

【问题讨论】:

标签: ruby-on-rails selenium session rspec capybara


【解决方案1】:

简短的回答,你不知道。更长的答案,这完全违背了端到端的功能测试的观点。

话虽如此,如果出于性能原因您想要缩短登录,大多数身份验证库都提供了一种测试模式,允许您这样做 - 例如通过 Warden TestHelpers 进行设计

【讨论】:

  • 登录是一项与任何其他功能一样的功能。如果我为我的应用程序运行一组 100 个功能测试,我希望登录测试一次,而不是 100 次。我还希望能够单独运行 100 项测试中的任何一项。
  • @BrettDonald 正如我所说,这就是大多数身份验证框架提供测试模式的原因。在功能测试中无法修改会话变量,因为您不应该直接修改它们。您设置数据库状态,然后在未修改该数据的情况下运行您的应用程序。如果您不想使用身份验证框架的测试模式,那么您可以访问站点中的页面,将正确签名的 cookie 添加到浏览器,然后重新访问该页面 - 但这比使用测试模式或仅使用更复杂登录。仅仅因为你不喜欢这个答案并不意味着它不是正确的答案。
  • 有时由于外部依赖关系,通过用户界面或数据库进行设置过于复杂。您可以考虑解释身份验证框架的测试模式如何解决无法访问会话的问题,以便在没有测试模式可用的情况下使用该技术。
  • 谢谢,stackoverflow,不允许我改变我的投票?
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2012-07-28
  • 2021-01-22
  • 2016-08-29
相关资源
最近更新 更多