我正在尝试运行以下规范
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')