You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:02:18