我正在通过Agile Web教程进行一些细微的更改.当我在Rails 3.2中运行功能测试时,我收到以下错误:
test_should_get_new(OrdersControllerTest):
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: cart, deal
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
这是订单夹具:
one:
name: MyString
address: MyText
email: MyString
pay_type: Check
Run Code Online (Sandbox Code Playgroud)
这是行项目装置:
one:
deal: one
order: one
Run Code Online (Sandbox Code Playgroud)
这是交易夹具:
one:
title: MyString
description: MyText
image_url: MyString
price: 9.99
Run Code Online (Sandbox Code Playgroud)
这是订单控制器代码:
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
Run Code Online (Sandbox Code Playgroud)
我尝试使用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
Run Code Online (Sandbox Code Playgroud)
和FactoryGirl代码:
FactoryGirl.define do
factory :cart do
end
end
Run Code Online (Sandbox Code Playgroud)
对于FactoryGirl我也试过'create'而不是'build'并得到了相同的错误信息.
虽然我可以在配置中关闭质量分配错误,但我宁愿不要因为我更喜欢正确测试.
有什么建议吗?
而不是LineItem.create(cart: cart, deal: deals(:one))尝试
item = LineItem.create
item.cart = cart
item.deal = deals(:one)
Run Code Online (Sandbox Code Playgroud)
或者在LineItem模型中,添加:
attr_accessible :cart, :deal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
836 次 |
| 最近记录: |