我正在关注Active Storage Overview中的文档,并尝试在这里找到的答案,但没有运气。
此测试中的断言总是失败:
test "verify attached video" do
att = sponsor_images(:sponsor_video_1).video_att
assert att.attached?
end
这是我的相关文件:
config/storage.yml
test_fixtures:
service: Disk
root: <%= Rails.root.join("tmp/storage_fixtures") %>
模型/sponsor_image.rb
class SponsorImage < ApplicationRecord
has_one_attached :video_att
validates :video_att, file_content_type: {
allow: /^video\/(mp4|m4v)$/,
if: -> { video_att.attached? }
}
...
赛程/sponsor_images.yml
sponsor_video_1:
sponsor: sponsor_1
name: Test SponsorImage Video
fixtures/active_storage/attachments.yml
video:
name: video_att
record: sponsor_image_1 (SponsorImage)
blob: video_blob
fixtures/active_storage/blobs.yml
video_blob: <%= ActiveStorage::FixtureSet.blob filename: "1920x1080.mp4", service_name: "test_fixtures" %>
文件
fixtures/files/1920x1080.mp4
确实存在并且可读。
当我使用调试器运行测试时,我可以看到附件存在且数据正确。该文件确实是在
tmp/storage_fixtures
下创建的。但是 attached?
方法返回 false
。
我希望我错过了一些简单的东西,但我确实看不到它是什么。
record
中的attachments.yml
标识符需要从sponsor_image_1
更改为sponsor_video_1
以匹配sponsor_images.yml
中的对象键名称。
这发生在我们最好的人身上,这就是为什么测试很重要:)