2012-04-21 8 views
2

私はAgile Webチュートリアルを若干変更します。私はRailsの3.2で機能テストを実行すると、私は次のエラーを取得しています:ここでMass Assignment Rails 3.2を使用してAgile Webチュートリアルで新しいアクションをテストする際のセキュリティエラー

test_should_get_new(OrdersControllerTest): 
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: cart, deal 

はorders_controller_test.rbコードです:ここで

test "should get new" do 
    cart = Cart.create 
    session[:cart_id] = cart.id 
    LineItem.create(cart: cart, deal: deals(:one)) 

    get :new 
    assert_response :success 
end 

は受注器具です:

one: 
    name: MyString 
    address: MyText 
    email: MyString 
    pay_type: Check 

ここにラインアイテムの備品があります:

one: 
    deal: one 
    order: one 
ここ

のお得な器具である:ここで

one: 
    title: MyString 
    description: MyText 
    image_url: MyString 
    price: 9.99 

は、注文コントローラのコードです:

def new 
    @cart = current_cart 
    if @cart.line_items.empty? 
    redirect_to store_url, notice: "Your cart is empty" 
    return 
    end 

    @order = Order.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @order } 
    end 
end 

私はFactoryGirlを使用してみましたが、それでも同じエラーメッセージが表示されました。ここでは、コードは次のとおりです。

test "should get new" do 
    cart = FactoryGirl.build(:cart) 
    session[:cart_id] = cart.id 
    LineItem.create(cart: cart, deal: deals(:one)) 

    get :new 
    assert_response :success 
end 

そしてFactoryGirlコード:

FactoryGirlについては
FactoryGirl.define do 
    factory :cart do 
    end 
end 

私はまた、代わりに「ビルド」の「作成」しようとしたと同じエラーメッセージが表示されました。

設定で質量割り当てエラーをオフにすることはできますが、適切にテストすることが好きなので、私はむしろそうしません。

お願いします。

+0

エラーは 'LineItem#create'によると思います。 LineItemモデルのコードを投稿できますか? –

答えて

5

代わりのLineItem.create(cart: cart, deal: deals(:one))追加、

item = LineItem.create 
item.cart = cart 
item.deal = deals(:one) 

たりのLineItemモデルのを試してください:あなたの 'モデル' は、

attr_accessible :cart, :deal 
+0

2番目のオプションが機能しました。私が最初に試したところ、「期待される応答は<:success>であるが、回答は<302>だった」というエラーメッセージが出ました。 attr_accessibleは私に何かを脆弱にしますか?私は人が問題にならないように価格を変更できない限り、それを理解しています。 – Castielle

0

を、 'order.rbは' attr_accessibleを追加ライン

class Order < ActiveRecord::Base 

has_many :line_items, dependent: :destroy 
attr_accessible :name, :address, :email, :pay_type 

end 
関連する問題