2011-08-25 115 views
0

我有一個問題讓我的rspec控制器測試通過attr_accessible在Rspec中......但不是從控制檯。Rspec&Paperclip:破壞與attr_accessible?

post :create, :banner => valid_attributes 

失敗,但

Banner.create!(valid_attributes) is accepted. 

如果我拿出attr_accessible從橫幅的模型,或者我拿出validates_attachment_presence:bannerimage,它的工作原理。嘗試添加bannerimage_attributes和四個回形針生成的:bannerimage列到我的attr_accessible - 沒有喜悅。試圖拿出其他回形針驗證(內容類型,大小) - 仍然沒有喜悅。任何建議非常讚賞 - 我完全無所適從。

相關的代碼是在這裏:

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 

編輯: 橫幅可以通過網站進行創建。

下面的相關控制器代碼。沒有電話之前/之後,只是一個標準的寧靜創造。

def create 
    @banner = Banner.new(params[:banner]) 

    if @banner.save 
     redirect_to admin_banner_url(@banner), notice: 'Banner was successfully created.' 
    else 
     render action: "new" 
    end 
    end 
+0

你還沒有發佈你的控制器代碼。你發佈的規範是通過這個,所以問題可能在那裏。您還沒有說過是否可以通過Web界面的標準表單創建橫幅。 –

+0

上面都添加了 – PlankTon

回答

1

您的代碼似乎沒有任何明顯的問題可能導致此問題。有一點你應該注意的是你在name上有一個唯一性約束,但是valid_attributes總是返回相同的名字。這不是你的問題所在,我只是提到它是需要記住的。

我只能給你如何嘗試和自己調試的建議。您可以訪問規範中新創建的橫幅assigns(: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)以查看其所有屬性。

對不起,沒有更多的幫助。我會在評論中寫下這些,但我需要漂亮的格式。