Rails 7 ActiveStorage Fixture附件无法关联,attached?断言失败
问题排查与解决方案
你的测试断言assert att.attached?始终失败,核心原因是Active Storage附件Fixture与主模型Fixture的关联不匹配,再加上测试环境未配置对应存储服务,导致attached?方法无法正确识别附件状态。
1. 修复附件Fixture的关联错误
在fixtures/active_storage/attachments.yml中,你指定的关联记录是sponsor_image_1 (SponsorImage),但sponsor_images.yml里的Fixture名称是sponsor_video_1,两者无法对应。修改如下:
# fixtures/active_storage/attachments.yml video: name: video_att record: sponsor_video_1 (SponsorImage) # 改为和sponsor_images.yml一致的Fixture名称 blob: video_blob
2. 配置测试环境使用指定存储服务
确保config/environments/test.rb中设置了和storage.yml匹配的Active Storage服务:
# config/environments/test.rb Rails.application.configure do # ...其他配置 config.active_storage.service = :test_fixtures end
3. 清理无效存储文件(可选)
如果之前的测试生成了无效存储文件,可先清理临时目录再重新运行测试:
rm -rf tmp/storage_fixtures rails test
修改后,sponsor_images(:sponsor_video_1).video_att.attached?会正确返回true——附件Fixture现在能正确关联到对应SponsorImage记录,且测试环境使用了匹配的存储服务识别附件状态。
内容的提问来源于stack exchange,提问作者Beer Me
相关产品推荐
相关产品推荐

