1

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

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

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

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

session[:started] = 'yes' puts "Start: #{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 调用创建了一个单独的会话,还是我的应用程序正在做一些事情来分离会话?

为什么要创建 2 个会话?

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

使用 cookie 存储。

4

2 回答 2

1

在现代 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
于 2021-02-15T19:53:02.017 回答
0

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

问题是 Capybara 有自己的会话。

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

于 2012-07-31T11:23:29.990 回答