使用Minitest

时间:2017-03-22 07:54:40

标签: ruby-on-rails carrierwave minitest

只是尝试向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

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

/位置/ 24 /上传/ 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特定的问题。

1 个答案:

答案 0 :(得分:0)

这里很晚才来。

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
}

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