Ruby on rails 未定义的方法'tempfile';至于\x89PNG\r\n“文件”一串

Ruby on rails 未定义的方法'tempfile';至于\x89PNG\r\n“文件”一串,ruby-on-rails,rspec,Ruby On Rails,Rspec,我的控制器规范中有以下文件用于上载文件: post :file_upload, user_id: @project.user.username, id: @project.name, branch_name: 'master', commit: 'first commit', file: fixture_file_upload("files/happypanda.png", "image/png") 我认为这是上传文件的正确方式,但它一直让我: NoMethodE

我的控制器规范中有以下文件用于上载文件:

post :file_upload,
   user_id: @project.user.username,
   id: @project.name,
   branch_name: 'master',
   commit: 'first commit',
   file: fixture_file_upload("files/happypanda.png", "image/png")
我认为这是上传文件的正确方式,但它一直让我:

NoMethodError:“\x89PNG\r\n”的未定义方法“tempfile”:字符串


请告诉我应该发布哪些其他相关信息。

我最近也遇到了
fixture\u file\u upload
的问题,但好消息是,该方法只是大致实现以下代码的快捷方式:

Rack::Test::UploadedFile.new("#{Rails.root}/spec/fixtures/#{file_path}", mime_type)
因此,请尝试使用此较低级别的调用,如果这样做对您更有效,您甚至可以将其包装在助手方法中:

def file_upload(name)
  Rack::Test::UploadedFile.new("#{Rails.root}/spec/_files/#{name}")
end

(请注意,路径
/spec/fixtures
,没有什么特别之处,这只是假定的默认值。)

抱歉@Topher我已经尝试过
Rack::Test::UploadedFile.new(File.expand_path(“spec/factories/files/happypanda.png”),“image/png”)
它给了我同样的错误。