手动设置Capybara javascript_driver导致方法桩失效问题求助
问题原因
你自定义的@accessibility标签只完成了切换javascript_driver这一步,漏了Capybara给原生@javascript标签绑定的全量配套逻辑:
- Rails测试默认非JS场景用事务性Fixtures,数据变更只在测试线程生效,执行完自动回滚;原生
@javascript标签会自动禁用事务性Fixtures,切换为适配多线程的数据库清理策略,保证测试线程、浏览器驱动线程、应用服务器线程的数据一致 - 原生
@javascript标签还会同步处理会话共享、测试桩上下文同步、驱动重置等配套逻辑
你单独加@accessibility时只有驱动切换生效,配套逻辑缺失,所以模拟登录的方法桩无法在应用线程生效;同时加两个标签时@javascript触发了完整配套逻辑,所以运行正常。
解决方法
直接把自定义标签加入Capybara的JavaScript标签列表即可,不需要自己写Before钩子,会完全复用@javascript的所有处理逻辑,和你预期的行为完全一致。
在你的Cucumber配置文件(一般是features/support/env.rb)中添加如下配置:
# 把@accessibility加入Capybara的JS标签列表 Capybara.javascript_tags << '@accessibility'
添加后删除你之前自己写的Before('@accessibility')驱动切换代码即可。
内容的提问来源于stack exchange,提问作者tim_south
相关产品推荐
相关产品推荐

