2011-08-12 28 views
5

Test ve raylar konusunda oldukça yeniyim ve kendimi bulmaya çalıştım ama hiç şansı yok.test raylarının rspec ile iç içe öznitelikleri

Ben şu modeller

class Picture < ActiveRecord::Base 
    belongs_to :product 
    has_attached_file :image 
end 

class Product < ActiveRecord::Base 
    has_many :pictures, :dependent => :destroy 
    accepts_nested_attributes_for :pictures, :reject_if => lambda { |p| p[:image].blank? }, :allow_destroy => true 
end 

ve oldukça standart, sanırım bir kontrolör ...

def create 
    @product = Product.new(params[:product]) 
    if @product.save 
    redirect_to products_path, :notice => "blah." 
    else 
    render :action => "new" 
    end 
end 

Ben yaklaşık nasıl gideceğini ve bu testi? ben böyle bir şey denedim ama işe olamıyorum:

describe ProductsController do 
    it "adds given pictures to the product" do 
    product = Factory.build(:product) 
    product.pictures.build(Factory.attributes_for(:picture)) 
    post :create, :product => product.attributes 
    Product.where(:name => product[:name]).first.pictures.count.should == 1 # or something 
    end 
end 

Muhtemelen öznitelikler oluşturmak eyleme geçirilir yolu ile ilgili bir şey var ama alabilirim nasıl olacak bu iş? 3.1.rc5 raylarını kullanıyorum ama bunun neden çalışmadığı ile ilgili bir şey yapamayacağından şüphe duyuyorum…

Ya da temel raylar işlevselliği olduğundan ve büyük olasılıkla iyi test edilmeye başlandığı için bunu test edemez miydiniz?

cevap

5

Gerçekten de bunu test etmenize gerek olmadığını söylediğiniz gibi, temel raylar işlevselliği tarafından karşılanacaktır ve bunun gibi şeyler bütünleştirme testleriniz tarafından kapsamlı bir şekilde ele alınmalıdır.

Bununla birlikte, bunu test etmek isterseniz, en iyi yol, geliştirme günlüklerinizi kuyruğa almak ve ne eylemlere gönderilmekte olduğunu görmek, bunu testinize kopyalayıp yapıştırmak ve daha sonra bunları ihtiyaçlarınıza göre değiştirmek için değiştirmektir.

Nitelikler veya factory_girl özelliklerinin kullanılması maalesef kesmeyecektir.

+0

şiddetle bu katılmıyorum. Test yapmıyorsanız ve herhangi bir belirtiminiz veya belgeniz yoksa, herhangi bir gerileme yakalamazsınız. – phikes

+0

@phikes, entegrasyon testleri kullanarak test ettiğim bölümü gördünüz mü? – jonnii

5

Dene:

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ]) 
İlgili konular