如何在 RSpec/Capybara 测试中更改配置?
How to make configuration changes in RSpec/Capybara tests?
我正在尝试使用 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.
Capybara 并不真正支持这一点,因为正如您在 session_store.rb 中的评论中看到的那样,应用确实需要重新启动才能使任何更改生效。您可以通过让 session_store.rb 基于环境变量设置它的值然后在 page.server
处操纵 Capybara::Server 实例以使其重新启动应用程序来使类似的东西工作测试,但它会是一个严重的 hack,我真的不推荐它用于测试目的。
注意:你永远不应该做 expect(page.current_path).to eq(candy_shop_path)
。这将导致不稳定的测试和挫败感。基本上你不应该在处理 Capybara 对象时使用标准的 RSpec 匹配器(eq 等),而是使用 Capybara 提供的匹配器,在这种情况下是 expect(page).to have_current_path(candy_shop_path)
.
我正在尝试使用 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.
Capybara 并不真正支持这一点,因为正如您在 session_store.rb 中的评论中看到的那样,应用确实需要重新启动才能使任何更改生效。您可以通过让 session_store.rb 基于环境变量设置它的值然后在 page.server
处操纵 Capybara::Server 实例以使其重新启动应用程序来使类似的东西工作测试,但它会是一个严重的 hack,我真的不推荐它用于测试目的。
注意:你永远不应该做 expect(page.current_path).to eq(candy_shop_path)
。这将导致不稳定的测试和挫败感。基本上你不应该在处理 Capybara 对象时使用标准的 RSpec 匹配器(eq 等),而是使用 Capybara 提供的匹配器,在这种情况下是 expect(page).to have_current_path(candy_shop_path)
.