【问题标题】:Multiple sessions with Rspec and Capybara?与 Rspec 和 Capybara 的多个会话?
【发布时间】:2012-07-28 18:20:48
【问题描述】:

尝试使用会话,但得到奇怪的结果。

以下 RSpec 代码似乎生成了 2 个单独的会话:

visit start_path
post session_path, { foo: "bar" }

在start_path控制器调用的方法中:

session[:started] = '是' 提出“开始:#{session.inspect}”

在会话控制器中:

def create
  session[:foo] = params[:foo]
  head :created
  puts "Sessions controller: #{session.inspect}"
end

输出如下:

Start: {"session_id"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ...
Sessions controller: {"session_id"=>"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" ...

会话 ID 不同。

这是因为 RSpec 创建了 2 个会话,post call 创建了一个单独的会话,还是我的应用正在做一些事情来分离会话?

为什么要创建 2 个会话?

尝试将 create 更改为另一个名称,但这并没有什么不同。

使用 cookie 存储。

【问题讨论】:

  • 你使用的是哪个版本的 rails/rspec/capybara?
  • 另外,您使用的是哪个驱动程序? (我使用 capybara-webkit 取得了巨大的成功)
  • Rails 3.2.2/Capybara 1.1.2/Rspec 2.11.0 和内置的 Capybara 驱动程序。

标签: ruby-on-rails rspec tdd capybara bdd


【解决方案1】:

感谢 Stack Overflow,在这里找到了解决方案:Rails - Losing session with Integration Tests and Capybara - CSRF related?

问题是 Capybara 有自己的会话。

需要使用page.driver.post而不是post

【讨论】:

  • 我已验证并且我没有使用帖子,而是使用“click_button”提交以进行操作。从测试的角度来看,填写表格并提交原因可能是更好的选择。
  • 是的,填写表单点击提交更好。对于这种情况,我正在模拟 AJAX 调用,因此没有表单或提交。
【解决方案2】:

在现代 Capybara 版本中,您可以通过简单的方式做到这一点:

  it 'should testing' do
    login user1
    # do stuff

    Capybara.using_session :user2 do
      login user2
      # do something in another chrome window as user2
    end
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-10-25
    • 2014-09-11
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多