【问题标题】:session object in rspec integration testrspec 集成测试中的会话对象
【发布时间】:2012-01-04 11:36:30
【问题描述】:

我正在使用 rspec 和 capybara 进行集成测试。

他们是在请求规范中制作会话对象的一种方式吗?

我有一个视图页面,我在其中使用会话对象检查其值以显示选择性内容。

面临的问题是我无法在请求规范中创建会话对象。 以下是视图示例:

<% if session[:role] == "Role" %>
---content---
<% else %>
--content--
<% end %>

在我的请求规范中

session[:role] = "Role"
visit my_path

但它给我一个错误“nil:NilClass 的未定义方法‘会话’”。

我也尝试过创建水豚的会话对象。但找不到任何东西。

他们有什么解决方法吗?我找不到与此相关的任何内容,似乎不可能。非常感谢您的帮助。

【问题讨论】:

  • 在 if 条件中,您可能指的是 == 而不是 =。
  • 是的,对不起,我的意思是 == 在这里

标签: ruby-on-rails integration-testing rspec2 capybara


【解决方案1】:

您应该执行请求规范的方式是访问用户通常需要访问的任何 URL,以便设置该会话变量。

除了手动设置会话 cookie 之外,我不知道还有什么其他方法。 Capybara.current_session.driver.browser.set_cookie 让您这样做,但您必须手动创建 cookie 值。

【讨论】:

  • 我试过这个:cookies[:role] = "Coaching", Capybara.current_session.driver.browser.set_cookie(cookies[:role]) ,但是没用。我做错了什么?
  • 这不会设置会话。您需要重现 rails 如何生成会话 cookie 并在调用 set_cookie 时使用该输出。你在这里绝对是不走寻常路的——就像我说的通常的方法就是访问设置会话的页面
  • 在我的例子中,我在应用程序控制器的私有方法中设置这些会话。
  • 当然可以,但是您必须在站点上查看最终调用该方法的某些页面。使用请求规范,您应该重现普通用户使用浏览器进行的交互以最终处于所需状态
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
相关资源
最近更新 更多