为RSpec系统测试实例化并关联Ahoy::Visit的问题
环境
- Rails 7.0.4
- Capybara 3.39.1
- Rspec 3.12.2
- Rspec Rails 6.0.2
- AhoyMatey 4.2.1
通用背景
我们的应用在用户未认证时,使用current_visit作为用户模型的替代,允许用户“试用”应用。完成引导流程后,会要求用户注册账户才能继续使用,之后通过Devise的after_sign_in方法将current_visit关联的资源与current_user绑定。我们还用到了Pundit和UserContext对象,但这和当前问题无关。
问题背景
我正在编写系统测试,希望将Visit实例化为特定状态,比如:
- 新访客,无关联资源
- 访客关联资源A,未关联资源B
- 访客同时关联资源A和B
访客仅关联B不关联A的情况不常见,且无法通过UI实现,本次测试只聚焦UI场景。
问题
我尝试了一种模拟方案,能在测试中成功实例化访客,调试时也能确认它符合预期方法,比如expect(visitor.reload.resource_a.size).to eq(1)能通过测试,但这个访客并没有和后端的current_visit关联起来,前端也不会显示这个实例化的Visit。
我试过初始化追踪器:
let(:visitor) { create(:ahoyvisit, :with_resources) } let(:tracker) { Ahoy::Tracker.new(visitor_token: visitor.token) }
但还是没法把访客和控制器的current_visit关联起来,不知道怎么补上这个测试缺口。
模拟
尝试用模拟也没用:
allow_any_instance_of(Ahoy::Tracker).to receive(:visit).and_return(visitor)
内容的提问来源于stack exchange,提问作者crespire
相关产品推荐
相关产品推荐

