尝试测试carrierwave
模型真的很难。我配置了我的测试环境:
if Rails.env.test?
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
config.fog_directory = BUCKET # required
config.fog_public = false # optional, defaults to true
config.fog_credentials = {
:provider => 'Local', # required
:local_root => LOCAL_ROOT, # required
:endpoint => "http://localhost:3000" # required
}
end
else
CarrierWave.configure do |config|
config.storage = :fog
config.max_file_size = 1.gigabytes # defaults to 5.megabytes
config.fog_directory = BUCKET # required
config.fog_public = false # optional, defaults to true
config.fog_credentials = {
:provider => PROVIDER, # required
:aws_access_key_id => access_key_id, # required
:aws_secret_access_key => secret_access_key # required
}
end
end
它非常适合测试上传。但是,测试下载很困难。
这是一个简单的测试:
require "test_helper"
class UploadTests < ActiveSupport::TestCase
let(:user) { User.me }
let(:repo) { Repository.first }
let(:sub) { user.subscriptions.where(repository_id: repo).first}
it "uploads a CSV file and lets me read it" do
filename = Rails.root.join("test/testfiles/product_upload_test.csv").to_s
upload = sub.uploads.new
File.open(filename) do |f|
upload.text_file_name = f
end
upload.save!
end
end
一切都很简单。但我想要做的是从模型中读取文件。换句话说,调用一些CarrierWave API,让我抓取文件并阅读它。
在制作中,我将所有内容存储在S3上。在测试中,一切都在本地文件中。我将local_root
设置为我的应用public
目录。
CarrierWave
仅报告url
作为路径,但不包含local_root
。我不觉得手动构建我想要从CarrierWave
读取的文件的路径是我的职责。存储文件的方式/位置应该从我的测试中隐藏...我应该构建该路径。
但我不知道还能做什么。我想做的就是阅读该文件。
答案 0 :(得分:0)
我将测试配置更改为以下内容:
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
config.fog_directory = BUCKET # required
config.fog_public = true # optional, defaults to true
config.fog_credentials = {
:provider => 'Local', # required
:local_root => LOCAL_ROOT, # required
:endpoint => LOCAL_ROOT # required
}
end
现在返回完整的网址。