我正在尝试运行以下规范
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 - 我将其缩小如下:
如果有人对帖子失败的原因有任何想法,我会非常感激。我猜测(并且原谅 - 我没有查看'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
答案 0 :(得分:18)
根据您的特定测试设置,以下某些组合可能有效,而不是发送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')