ruby-on-rails - 如何在 RSpec/Capybara 测试中进行配置更改?
问题描述
我正在尝试使用 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 根据环境变量设置它的值,然后操作 Capybara::Server 实例page.server
来让它重新启动被测应用程序,但这将是一个严重的黑客攻击我真的不推荐它用于测试目的。
注意:你永远不应该做expect(page.current_path).to eq(candy_shop_path)
. 这将导致不稳定的测试和挫败感。基本上你不应该在处理 Capybara 对象时使用标准的 RSpec 匹配器(eq 等),而是使用 Capybara 提供的匹配器,在这种情况下是expect(page).to have_current_path(candy_shop_path)
.
推荐阅读
- python - 在linregress python中重新排列标题
- python - 特征选择的单变量线性回归测试?
- python - pycharm输入返回一个int而不是字符串?
- javascript - 用ajax阻止谷歌浏览器扩展
- dialogflow-es - 将 DialogFlow 链接到桌面应用程序
- javascript - 使用 javascript 的图像过滤器
- python - python - 散景 - 带条件着色的堆积条形图
- python - 使用 python Librosa 分割音频文件
- css - Wordpress Twentyseventeen 主题:在哪里可以找到控制标题大小的内容
- java - 如何在java中提取两个字符之间的数据