2012-03-18 3 views
3
私はそれがすべてが正常に動作プロジェクトで

コントローラスペック+ドレイパー

describe "#show" do 
    before { @category = Factory :category } 
    before do 
    @product1 = Factory :product, category: @category 
    @product2 = Factory :product, category: @category 
    end 
    before { get :show, id: @category.id } 

    it { should respond_with :success } 
    it { assigns(:products).should eq [@product1, @product2] } 
end 

シンプルなアクションショー

def show 
    @category = Category.find(params[:id]) 
    @products = ProductDecorator.decorate(@category.products) 
end 

とテストだ私のコントローラではRSpecのとドレーパー宝石https://github.com/jcasimir/draper

を使用しています

と製品は正常に表示されますが、テストではこのようなエラーが発生します

Failure/Error: it { assigns(:products).should eq [@product1, @product2] } 

    expected: [#<Product ... >, #<Product ...>] 
     got: nil 

    (compared using ==) 

も私はProductDecorator.decorate(@ category.products)を交換する場合だけcategory.products @ - エラーなし私は

def show 
    @category = Category.find(params[:id]) 
    @products = ProductDecorator.decorate(@category.products) 
    puts @products.inspect 
end 

#<DecoratedEnumerableProxy of ProductDecorator for [#<Product ...>, #<Product ...>]> 

どれを得た@productsに検査した場合

提案?

答えて

-1

なぜあなたはこのデコレータをあなたの割り当てに定義してテストしますか?

it { assigns(:products).should eq(ProductDecorator.decorate([@product1, @product2] })) 
+0

はい、私はこれを試してみましたが、ゼロと製品アレイや「ProductDecoratorのDecoratedEnumerableProxy」を比較するの違いは何ですか? –