加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – rspec控制器中的Rails’post’命令:文件没有

发布时间:2020-12-16 21:30:36 所属栏目:百科 来源:网络整理
导读:我正在尝试运行以下规范 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 endenddef valid
我正在尝试运行以下规范
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')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读