如何测试模型以进行文件上传?
Posted
技术标签:
【中文标题】如何测试模型以进行文件上传?【英文标题】:How to test a model for file upload? 【发布时间】:2012-08-20 17:36:10 【问题描述】:我有一个模型,我使用该方法上传图片
在图像控制器中我调用 DataFile.save_image_file(params[:upload])
我的代码data_file.rb
def self.save_image_file(upload)
file_name = upload['datafile'].original_filename if (upload['datafile'] !='')
file = upload['datafile'].read
file_type = file_name.split('.').last
new_name_file = Time.now.to_i
name_folder = new_name_file
new_file_name_with_type = "#new_name_file." + file_type
new_file_name_thumb_with_type = "#new_name_file-thumb." + file_type
image_root = "#RAILS_CAR_IMAGES"
Dir.mkdir(image_root + "#name_folder");
File.open(image_root + "#name_folder/" + new_file_name_with_type, "wb") do |f|
f.write(file)
end
[new_name_file, new_file_name_with_type, new_file_name_thumb_with_type]
end
我想在 RSpec 中测试它
data_file_spec.rb
require 'spec_helper'
describe DataFile do
describe "Should save image file" do
before(:each) do
@file = fixture_file_upload('/files/test-bus-1.jpg', 'image/jpg')
end
it "Creating new car name and thumb name" do
@get_array = save_file(@file)
@get_array[:new_name_file].should_not be_nil
end
end
end
但测试不起作用
失败/错误:@file = fixture_file_upload('/files/test-bus-1.jpg', 'image/jpg') 无方法错误: # 的未定义方法“fixture_file_upload”
【问题讨论】:
【参考方案1】:您需要包含ActionDispatch::TestProcess
。尝试类似:
require 'spec_helper'
describe DataFile do
describe "Should save image file" do
let(:file) do
extend ActionDispatch::TestProcess
fixture_file_upload('/files/test-bus-1.jpg', 'image/jpg')
end
it "Creating new car name and thumb name" do
@get_array = save_file(file)
@get_array[:new_name_file].should_not be_nil
end
end
end
【讨论】:
文件被感知,但该方法没有看到另一个属性加载器 - 上传 ['datafile'] 鉴于我使用 工作 - DataFile.save_image_file(params[:upload][:datafile], params[:car_id])以上是关于如何测试模型以进行文件上传?的主要内容,如果未能解决你的问题,请参考以下文章