【问题标题】:Testing ActiveStorage attachments (FileNotFound)测试 ActiveStorage 附件 (FileNotFound)
【发布时间】:2019-08-23 21:24:12
【问题描述】:

我在测试 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 是否有效。
  • 我没有测试 activestorage 是否有效。我正在测试一种依赖于存储在活动存储中的文件的方法。抱歉,我发布了实际发生的事情的 sn-p,以便更容易理解/隔离。我实际上正在测试另一种方法,它依赖于存储在 activestorage 中的文件。

标签: ruby-on-rails rails-activestorage


【解决方案1】:

在挖掘 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

【讨论】:

    【解决方案2】:

    试试这个

    @assembly = Assembly.create(name: assemblies(:head_gasket).name)
    @assembly.image.attach(io: File.open('/path/to/file'), filename: 'file.name', content_type: 'mime/type')
    

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2018-06-17
      • 1970-01-01
      • 2021-05-02
      • 2019-05-13
      • 2018-10-31
      • 1970-01-01
      • 2020-03-01
      • 2019-08-04
      相关资源
      最近更新 更多