2011-08-12 30 views
5

Tôi khá mới để thử nghiệm và đường ray và cố gắng tìm ra nó nhưng không may mắn.các thuộc tính lồng nhau thử nghiệm của đường ray với rspec

tôi có các mô hình sau

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 

và một bộ điều khiển mà là khá chuẩn, tôi đoán ...

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

thế nào tôi sẽ đi về và kiểm tra điều này? Tôi đã thử một cái gì đó như thế này nhưng tôi không thể làm cho nó hoạt động:

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 

Nó có thể có liên quan đến cách thức các thuộc tính được chuyển đến hành động tạo nhưng làm cách nào tôi có thể làm việc này? Tôi sử dụng đường ray 3.1.rc5 nhưng tôi nghi ngờ rằng sẽ làm bất cứ điều gì liên quan đến lý do tại sao nó không hoạt động…

hoặc bạn sẽ không kiểm tra điều này vì nó là chức năng đường ray cơ bản và có khả năng được thử nghiệm tốt để bắt đầu?

Trả lời

5

Như bạn nói bạn không thực sự cần phải kiểm tra điều này, nhất thiết, bởi vì nó sẽ được bao phủ bởi chức năng đường ray cơ bản, và các công cụ như thế này cần được kiểm tra kỹ lưỡng bởi các bài kiểm tra tích hợp của bạn. Tuy nhiên, nếu bạn muốn kiểm tra cách tốt nhất thì hãy ghi nhật ký phát triển của bạn và xem những gì đang được đăng lên hành động, sao chép và dán vào thử nghiệm của bạn và sau đó sửa đổi nó để phù hợp với nhu cầu của bạn. Quay lại đầu trang

Sử dụng các thuộc tính hoặc thuộc tính factory_girl sẽ không thể cắt nó một cách không may.

+0

tôi phản đối kịch liệt với điều này. Bạn sẽ không bắt được bất kỳ hồi quy nào nếu bạn không kiểm tra và bạn không có bất kỳ đặc điểm kỹ thuật cũng như tài liệu nào. – phikes

+0

@phó bạn có thấy phần mà tôi đã nói thử nghiệm nó bằng các thử nghiệm tích hợp không? – jonnii

5

Hãy thử:

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ]) 
Các vấn đề liên quan