factory_girl + carrierwave + fixture_file_upload - >路径是否为零?

时间:2013-08-08 16:59:13

标签: ruby-on-rails rspec carrierwave factory-bot

我在我的工厂中使用fixture_file_upload在使用carrierwave安装的字段中。所以,我有以下内容:

模型:

class Job < ActiveRecord::base
  mount_uploader :translated_xliff, XliffUploader
end

工厂:

FactoryGirl.define do
  factory :job do
    translated_xliff { fixture_file_upload(
                           Rails.root.join(*%w[spec fixtures text.xliff])) }
   end
end

这很好,但现在我在我的Job控制器上添加一个动作,让一个人下载这个文件。为此,我有以下行动:

class JobsController < ApplicationController
  def xliff
    job = Job.find(params[:id])
    send_file(job.translated_xliff.path, disposition: 'attachment')
  end
end

但这会在send_file行引发异常:

Exception: no implicit conversion of nil into String

使用byebug我发现pathfile都是nil,所以我认为工厂女孩在添加文件时失败了。

我正在使用rails 3.2和ruby 2.0。我究竟做错了什么?我应该模拟路径方法,还是以不同的方式上传文件?

2 个答案:

答案 0 :(得分:1)

如果您使用以下内容,它会有所帮助:

job.translated_xliff.file.path

如果失败,当您在工厂中使用Rack :: Test:UploadedFile.new时会发生什么:

FactoryGirl.define do
  factory :job do
    translated_xliff { Rack::Test::UploadedFile.new(File.open(Rails.root.join('spec', 'fixtures', 'text.xliff')), 'application/x-xliff+xml') }
  end
end

答案 1 :(得分:1)

问题是文件名错误,不是text,而是test。我不知道为什么,但工厂女孩并没有像往常那样抛出错误,但是这个问题超出了我的问题范围。