如何在RSpec/Capibara测试中进行配置更改



我正试图使用RSpec和Capybara编写一个功能规范,该规范在两种类型的session_store(cookie_store和active_record_store(之间进行更改,并希望用户在从active_record-store切换到cookie_stre时仍保持登录状态。基本上由于某些原因,我将从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。

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)

相关内容

  • 没有找到相关文章

最新更新