【问题标题】:How to make configuration changes in RSpec/Capybara tests?如何在 RSpec/Capybara 测试中进行配置更改?
【发布时间】:2021-07-14 01:22:52
【问题描述】:

我正在尝试使用 RSpec 和 Capybara 编写功能规范,该规范在两种类型的 session_stores 之间进行更改:cookie_store 和 active_record_store,并且即使我们从 active_record_store 切换到 cookie_store,也希望用户保持登录状态。基本上出于某些原因,我正在从 active_record_store 切换到 cookie_store 并想查看会话是否保持存储而不管配置更改。

这是我的session_store.rb 文件:

# Be sure to restart your server when you modify this file.

Project::Application.config.session_store :cookie_store, :key => '_project_session'

这是我的规格:

 describe "Admin logged into" do
    it 'shows the correct interface for logged in users' do
      # ---> Here use active_record_store:
      # Project::Application.config.session_store :active_record_store
      log_in_admin(admin)
      visit candy_shop_path
      expect(page.current_path).to eq(candy_shop_path)
 

      # --> Here switch to cookie_store
      # Project::Application.config.session_store :cookie_store, :key => '_project_session'
      visit candy_shop_path
      expect(page.current_path).to eq(candy_shop_path)
    end
  end

我需要关于注释掉的部分的帮助。我不确定如何配置 RSpec 以先使用 :active_record_store 然后切换到 :cookie_store。

【问题讨论】:

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


    【解决方案1】:

    Capybara 并不真正支持这一点,因为正如您从 session_store.rb 中的评论中看到的那样,确实需要重新启动应用程序才能使任何更改生效。您可以通过让 session_store.rb 根据环境变量设置它的值,然后在page.server 处操作 Capybara::Server 实例来让它重新启动被测应用程序,从而使这样的东西工作,但它会是一个严重的黑客攻击,我真的不推荐它用于测试目的。

    注意:您永远不应该使用expect(page.current_path).to eq(candy_shop_path)。这将导致不稳定的测试和挫败感。基本上,在处理 Capybara 对象时,您永远不应该使用标准的 RSpec 匹配器(eq 等),而是使用 Capybara 提供的匹配器,在这种情况下为 expect(page).to have_current_path(candy_shop_path)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      相关资源
      最近更新 更多