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

Rails ActiveStorage attached?返回true但RSpec测试断言失败原因排查

问题原因

核心逻辑

你测试用例中声明的user实例,和接口请求执行时控制器内加载的@current_user是两个完全独立的内存对象:

  • 控制器执行@current_user.logo.attach(image)操作时,已经成功将附件关联写入了数据库,所以你在控制器内打印@current_user.logo.attached?返回为true,同时统计ActiveStorage::Attachment数量变化的用例也可以正常通过(该用例直接查询数据库全局数据,不依赖测试用例内的user对象状态)
  • 测试用例中的user对象是请求发起前就初始化好的,没有和数据库的最新状态同步,所以它的logo关联还是请求发起前的未绑定状态,调用attached?自然返回false。

解决方案

在执行断言前,调用reload方法刷新测试用例中user对象的状态,重新从数据库拉取最新的关联数据即可:

it "attaches a logo" do
  post update_logo_url,
    params: { logo: fixture_file_upload(file_fixture('400x400.png'), 'image/png') },
    headers: { "Authorization" => token_generator(user.id) }
  user.reload # 同步数据库最新状态
  expect(user.logo).to be_attached
end

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:54:03