【问题标题】:Testing Carrierwave Uploads with Minitest使用 Minitest 测试载波上传
【发布时间】:2021-06-10 21:23:28
【问题描述】:

只是想向我的 Carrierwave Uploader 添加一些基本测试。我从默认生成的测试开始并尝试从那里开始。我收到一个奇怪的错误,不知道从哪里开始。

我有一个多态 Upload 模型,它有:

mount_uploader :file, DocumentUploader

我的 DocumentUploader 有这样的东西:

  def store_dir

    "#{model.uploadable_type.downcase.pluralize.underscore}/#{model.parent_asset.id}/uploads/#{model.id}/"

  end

这使我的商店目录看起来像:

/locations/24/uploads/56

例如当我运行默认测试时:

  test "should destroy upload" do
    assert_difference('Upload.count', -1) do
      delete :destroy, id: @upload
    end

    assert_redirected_to uploads_path
  end

我明白了:

ERROR["test_should_destroy_upload", UploadsControllerTest,1.9893769259997498]
test_should_destroy_upload#UploadsControllerTest (1.99s)
NoMethodError: NoMethodError: undefined method `id' for nil:NilClass
            app/uploaders/document_uploader.rb:34:in `store_dir'

在我的上传装置中,我设置了多态关联等。model 未设置为 DocumentUploader 中的可上传关联,即它为零。

到目前为止,我的所有其他测试都工作正常,我的上传器在生产和开发等方面工作正常。我确信我在设置中遗漏了一些微不足道的东西,或者这是 Carrierwave 特定的问题。

【问题讨论】:

    标签: ruby-on-rails carrierwave minitest


    【解决方案1】:

    在这里插话很晚。

    我发现将fog 与carrierwave 一起使用很麻烦。 carrierwave-aws gem 对我来说是没有商量余地的。

    Read Me 提供了一个快速的整体存根以添加到uploads.rb 配置文件:

    config.aws_credentials = {
      [...], # Required
      stub_responses:    Rails.env.test? # Optional, avoid hitting S3 actual during tests
    }
    

    对于表示层,我认为这是可以接受的,因为您经常希望看到结果,尤其是这些结果的版本。一旦它们正常运行,如果方法不改变,它们就很难被破坏——而且这些方法是相当静态的。

    【讨论】:

    • 我同意 - 在这之后我很快就放弃了雾。
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多