gpt4 book ai didi

ruby-on-rails - 测试 ActiveStorage 附件 (FileNotFound)

转载 作者:行者123 更新时间:2023-12-04 12:42:03 30 4
gpt4 key购买 nike

我在测试 ActiveStorage 附件时遇到错误。代码是这样的:

class AssemblyTest < ActiveSupport::TestCase

test 'Updating svg attachment should upload the updated file' do
@assembly = Assembly.create(name: assemblies(:head_gasket).name,
image:
fixture_file_upload('files/track-bar.svg', 'image/svg+xml'))
assert @assembly.image.attached?
assert_not_empty @assembly.image.download
end
end

我收到以下错误 Minitest::UnexpectedError: ActiveStorage::FileNotFoundError: ActiveStorage::FileNotFoundError当@assembly.image.download 被调用时。 attached?断言正在通过,但我无法弄清楚为什么文件下载失败。此外, tmp/storage 中没有任何显示目录,其中 ActiveStorage 被配置为存储文件。

最佳答案

在挖掘 ActiveStorage 代码时 I found this snipped它依赖于实际的数据库提交来执行文档上传(或保存到磁盘):

after_commit(on: %i[ create update ]) { attachment_changes.delete(name.to_s).try(:upload) }

如果您使用 数据库事务在测试环境中,这将不会存储文档。

要解决此问题,您可以手动触发提交回调:

run_callbacks(:commit)

所以在你的情况下,这可能有效:

class AssemblyTest < ActiveSupport::TestCase

test 'Updating svg attachment should upload the updated file' do
@assembly = Assembly.create(name: assemblies(:head_gasket).name,
image:
fixture_file_upload('files/track-bar.svg', 'image/svg+xml'))
@assembly.run_callbacks(:commit) # Run commit callback to store on disk
assert @assembly.image.attached?
assert_not_empty @assembly.image.download
end
end

关于ruby-on-rails - 测试 ActiveStorage 附件 (FileNotFound),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633171/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com