只是尝试向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特定的问题。
答案 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
}
对于表示层,我认为这是可以接受的,因为您经常希望看到结果,尤其是这些结果的版本。一旦这些运行正常,如果方法不改变,它们就很难被破坏——而且这些都是相当静态的方法。