我正在浏览敏捷 Web 教程,并进行了一些细微的更改。在 Rails 3.2 中运行功能测试时,出现以下错误:
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.define do
factory :cart do
end
end
对于 FactoryGirl,我还尝试了“创建”而不是“构建”并得到了相同的错误消息。
虽然我可以关闭配置中的批量分配错误,但我宁愿不这样做,因为我更喜欢正确测试。
请问有什么建议吗?