ruby-on-rails - 如何在测试之间重复使用 Capybara session ?

标签 ruby-on-rails session cookies capybara

我想继续使用同一个 session ,我的意思是 Rails 在各种 Test::Unit 之间的 session 使用 Capybara 的集成测试。 Capybara::Session对象在所有测试中都是相同的,因为它被重复使用,但是当我在另一个测试中访问另一个页面时,我会立即注销。

挖掘我发现capybara_session.driver.browser.manage.all_cookies在一个测试和下一个测试之间被清除。

有什么想法吗?或者为什么?或如何避免?

为了解决这个问题,我将 cookie 保存在一个类变量中,稍后通过运行重新添加:

capybara_session.driver.browser.manage.add_cookie(@@cookie)

它似乎工作,cookie在那里,但是当有请求时,cookie被另一个替换,所以它没有效果。

有没有其他方法可以实现这一目标?

最佳答案

在与页面交互的 capybara 代码之后添加以下内容:

Capybara.current_session.instance_variable_set(:@touched, false)

or

page.instance_variable_set(:@touched, false)

如果这不起作用,这些可能会有所帮助:

https://github.com/railsware/rack_session_access

http://collectiveidea.com/blog/archives/2012/01/05/capybara-cucumber-and-how-the-cookie-crumbles/

关于ruby-on-rails - 如何在测试之间重复使用 Capybara session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12605692/

相关文章:

php - 在 cookie 中存储嵌套数组

ruby-on-rails - Rails 生成 Controller 给我加载错误

ruby-on-rails - 在 Rails 中将继承转换为组合

c# - 使用 http 方将 json 发送到 web api

session - session 范围内的Grails Controller变量(Grails 3)

javascript - Application Insights 安全 cookie

ruby-on-rails - Big Decimal 存储为 60.00,返回为 0.0?

nhibernate - 在 Web 应用程序(特别是 MVC)中,在哪里打开和关闭 NHibernate ISession?

node.js - 如何在 session 中存储 JWT token ?

javascript - jquery SlideUp/slideDown cookie