Ruby on rails Rspec&;回形针:坏了,可以取吗?

Ruby on rails Rspec&;回形针:坏了,可以取吗?,ruby-on-rails,ruby-on-rails-3,rspec,paperclip,Ruby On Rails,Ruby On Rails 3,Rspec,Paperclip,我在rspec控制器测试中遇到问题,无法通过rspec中可访问的attr_…但无法从控制台访问 post :create, :banner => valid_attributes 失败了,但是 Banner.create!(valid_attributes) is accepted. 如果我从banners模型中取出attr_,或者取出validates_附件_presence:bannerimage,它就会工作。尝试添加bannerimage_属性和生成的四个回形针:bannerim

我在rspec控制器测试中遇到问题,无法通过rspec中可访问的attr_…但无法从控制台访问

post :create, :banner => valid_attributes
失败了,但是

Banner.create!(valid_attributes) is accepted.
如果我从banners模型中取出attr_,或者取出validates_附件_presence:bannerimage,它就会工作。尝试添加bannerimage_属性和生成的四个回形针:bannerimage列到我的属性可访问-没有乐趣。尝试取出其他回形针验证器(内容类型、大小)-仍然没有乐趣。非常感谢您的任何建议,我完全不知所措

相关代码如下:

RSPEC测试的相关位:

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


describe "POST create" do
  describe "with valid params" do
    it "creates a new Banner" do
      expect {
        post :create, :banner => valid_attributes
      }.to change(Banner, :count).by(1)
  end
end
型号:

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

您的代码似乎没有任何明显的问题会导致这种情况。需要注意的一点是,
name
上有唯一性约束,但是
valid\u属性总是返回相同的名称。这不是你的问题所在,我只是说这是需要记住的

我只能给你一些建议,告诉你如何亲自调试。您可以通过
分配(:banner)
访问等级库中新创建的横幅。所以,你可以这样做:

describe "POST create" do
  describe "with valid params" do
    it "creates a new Banner" do
      expect {
        post :create, :banner => valid_attributes
        pp assigns(:banner).errors
      }.to change(Banner, :count).by(1)
  end
end
这将把横幅的错误转储到运行测试的控制台。如果未保存横幅,则意味着该横幅无效,因此首先要检查生成了哪些错误。您还可以使用
pp assigns(:banner)
转储整个横幅,以查看其所有属性


对不起,我帮不了你。我本想在评论中写这篇文章,但我需要好的格式。

您还没有发布控制器代码。你发布的规范已经通过了,所以问题可能就在那里。您还没有说明是否可以从web界面通过标准表单创建横幅。
describe "POST create" do
  describe "with valid params" do
    it "creates a new Banner" do
      expect {
        post :create, :banner => valid_attributes
        pp assigns(:banner).errors
      }.to change(Banner, :count).by(1)
  end
end