2011-08-12 19 views
5

私はテストやレールには新しく、自分自身を理解することを試みましたが、運が全くありませんでした。rspecを使ってレールのネストされた属性をテストする

I持って、次のモデル

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 

とかなり標準、私は推測しているコントローラ...

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

私がどのように行くだろうし、これをテストしますか?私はこのような何かを試してみましたが、私はそれを動作させることはできません。

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 

それはおそらく属性は、createアクションに渡されたが、どのように私はこの作業を取得することができますされている方法とは何かを持っていますか?私はレール3.1.rc5を使用していますが、なぜそれが動作していないのと関係があるのか​​疑問に思っています...

基本的なレール機能であり、

答えて

5

これは基本的なレール機能でカバーされるため、必ずしもテストする必要はありませんが、このようなものは統合テストによって完全にカバーされるべきです。

しかし、これをテストしたい場合は、開発ログとアクションに投稿されている内容を確認し、コピーしてテストに貼り付けてから、必要に応じて修正してください。

属性またはfactory_girl属性を使用すると、残念ながらそれをカットしません。

+0

私は強く、これに反対します。テストをしておらず、仕様やドキュメントがない場合は、回帰を捕まえません。 – phikes

+0

@phikes統合テストを使ってテストした部分を見ましたか? – jonnii

5

試してみてください。

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ]) 
関連する問題