2011-08-25 6 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와 paperclip 생성 : 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

컨트롤러 코드를 게시하지 않았습니다. 당신이 게시 한 스펙이이를 통과하므로 문제가있을 수 있습니다. 또한 웹 인터페이스에서 표준 양식을 통해 배너를 만들 수 있는지 여부에 대해서도 언급하지 않았습니다. –

+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)으로 전체 배너를 덤프하여 모든 속성을 볼 수도 있습니다.

죄송합니다. 나는 이것을 주석에 적었을 것이다. 그러나 나는 좋은 형식이 필요했다.

관련 문제