2013-04-10 3 views
0

내가 내 Report 모델이 사양/비품에서 파일을 저장하지 않습니다RSpec에 : Carrierwave는

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 

이 모델은 내가 문서 및 기타 PARAM을 저장하는 데 사용 attach metod을 가지고 있습니다. 이제이 함수가 작동하는지 테스트하고 싶습니다.

/spec/models/report_spec.rb 내가 /spec/files에서 파일을 저장하려고하면

# 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 

내가 같은 오류 얻을 :

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") 내 테스트가 통과합니다.

어떻게 해결할 수 있습니까?

답변

0

아, 답변을 찾았습니다. Carrierwave는 빈 파일을 저장하지 않고 하나만 가지고 있습니다. 파일 (/spec/files/report.csv)에 일부 데이터를 추가하면 문제가 사라졌습니다.