Rspec:Carrierwave不保存spec / fixtures中的文件

时间:2013-04-10 14:51:54

标签: mysql ruby-on-rails rspec carrierwave

我有Report型号:

class Report < ActiveRecord::Base
  belongs_to :user

  attr_accessible :ready_status, :document

  mount_uploader :document, DocumentUploader

  def attach( report_file )
    self.update_attributes( :document => File.open( report_file ), :ready_status => true )
  end
end

此模型具有attach metod,我用它来保存文档和其他参数。现在我想测试这个功能是否有效。

/spec/models/report_spec.rb

# encoding: utf-8
require 'spec_helper'

describe Report do
  before(:each) do
    @user = User.make!
  end

  ...

  context "File's saving" do
    before(:each) do
      @report = @user.reports.create
      @csv_report_file = "#{Rails.root}/spec/files/report.csv"
    end

    it "CSV should be saved" do
      csv_report_filename = @csv_report_file.split("/").last

      @report.attach @csv_report_file
      @report.reload

      @report.document.file.filename.should == csv_report_filename
    end
  end
end

当我尝试从/spec/files保存文件时,我收到了这样的错误:

Report File's saving CSV should be saved
     Failure/Error: @report.document.file.filename.should == csv_report_filename
     NoMethodError:
       undefined method `filename' for nil:NilClass

但是,当我尝试另一个文件夹中的另一个文件(例如"#{Rails.root}/samples/my-report.csv")时,我的测试通过了。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

哦,我找到了答案。 Carrierwave不保存空文件,我有一个。当我在文件中添加一些数据(/spec/files/report.csv)时,我的问题就消失了。