如何测试模型以进行文件上传?

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])

以上是关于如何测试模型以进行文件上传?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 中上传 XML 文件,解析 XML 并与现有模型数据集进行比较

Fiddler小技巧-测试上传文件接口

Python接口测试文件上传

如何对 Web 表单文件上传进行压力测试?

如何在 e2e AngularJS 测试中进行文件上传?

如何使用 Supertest 对文件上传进行单元测试并发送令牌?