ruby-on-rails – rspec控制器中的Rails’post’命令:文件没有通过. (是否有多部分设置?)

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – rspec控制器中的Rails’post’命令:文件没有通过. (是否有多部分设置?)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试运行以下规范
describe "POST create" do
  describe "with valid params" do
    it "redirects to the created banner" do
      post :create,:banner => valid_attributes
      response.should redirect_to(admin_banner_url(Banner.last))
    end
  end
end


def valid_attributes
  demo_image = File.open(File.join(Rails.root,"spec","samples","laptop1.jpg"))
  {
    :name => 'Test Spec Banner',:bannerimage => demo_image
  }
end

创建在validates_presence_of上验证失败:bannerimage – 我将其缩小如下:

>如果我从bannerimage中取出validates_presence_of验证,它可以工作,但横幅报告为’missing.png’
> Banner.create!(valid_attributes)有效
>我上面只显示了一个规格,但问题出现在涉及该帖子的任何规范上:create,:banner => valid_attributes行
>我已经取出了对attr_accessible的所有引用……没有区别
>我尝试将validate_attributes切换到Factory.attributes_for(:banner),其中包含相同的文件信息:bannerimage
>表单通过浏览器工作得很好,包括图像上传/处理
> File.exists?确认引用的文件确实存在.

如果有人对帖子失败的原因有任何想法,我会非常感激.我猜测(并且原谅 – 我没有查看’post’命令的内部工作情况,可能在这里),它在调用接受文件(?)时缺少某种“multipart”参数. .不能通过谷歌找到任何东西.

任何想法都赞赏 – 我完全被难过了.

控制器是完全未经修改的Rails 3.1脚手架资源.型号如下.

class Banner < ActiveRecord::Base
  # attr_accessible :name,:url,:bannerimage

  has_attached_file :bannerimage,:styles => { :full => "960x",:thumb => "100x" }

  validates_attachment_content_type :bannerimage,:content_type => [ 'image/jpg','image/jpeg','image/gif','image/png'],:message => 'file must be a gif,jpeg or png image'

  validates_attachment_size :bannerimage,:less_than => 3.megabytes

  validates_presence_of :name
  validates_attachment_presence :bannerimage
  validates_uniqueness_of :name

  has_many :pages,:dependent => :nullify

  def to_s
    name
  end
end

解决方法

根据您的特定测试设置,以下某些组合可能有效,而不是发送File.open
fixture_file_upload('spec/samples/laptop1.jpg','image/jpg')

这个函数是由rails定义的,我相信它可以用于rspec-rails,即使rails希望你使用TestUnit

我在Cucumber步骤定义中使用了它,它可能在rspec示例中有效.

Rack::Test::UploadedFile.new('spec/samples/laptop1.jpg','image/jpg')

猜你在找的Ruby相关文章