Ruby on rails 功能后测试失败
我正在尝试创建一个功能测试,在我的一个控制器中测试create方法。就我的一生而言,我无法理解为什么这会失败。我得到一个失败,零个错误:Ruby on rails 功能后测试失败,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在尝试创建一个功能测试,在我的一个控制器中测试create方法。就我的一生而言,我无法理解为什么这会失败。我得到一个失败,零个错误: 1) Failure: test_should_create_order(OrdersControllerTest) [/Users/user/rails_work/depot/test/functional/orders_controller_test.rb:38]: "Order.count" didn't change by 1. <3> e
1) Failure:
test_should_create_order(OrdersControllerTest) [/Users/user/rails_work/depot/test/functional/orders_controller_test.rb:38]:
"Order.count" didn't change by 1.
<3> expected but was
<2>.
我的订单:
one:
name: Dave Thomas
address: MyText
email: dave@example.org
pay_type: Check
和我的订单#创建控制器:
def create
@order = Order.new(params[:order])
@order.add_line_items_from_cart(current_cart)
respond_to do |format|
if @order.save
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
format.html { redirect_to store_url, notice: 'Thank you for your order' }
format.json { render json: @order, status: :created, location: @order }
else
@cart = current_cart
format.html { render action: "new" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
现在,如果我将功能测试中的设置方法更改为:
@order = Order.create(orders(:one))
而不是:
@order = orders(:one)
失败消失了,但我得到了其中8个错误:
NoMethodError: undefined method `stringify_keys' for #<Order:0x007f8c62dbb960>
NoMethodError:#
如果有人能帮我修复这个功能测试,我将不胜感激。欢迎任何和所有的意见 底线:分别分配每个
顺序
属性
我不熟悉“批量分配”漏洞(Rails中的新漏洞),但是有人因为它而在特定测试中遇到困难
请尝试分别拼写顺序的每个属性。而不是
post :create, order: @order.attributes.slice(Order.accessible_attributes)
使用
整个测试将如下所示:
test "should create order" do
assert_difference('Order.count') do
post :create, order: { address: @order.address, email: @order.email, name: @order.name, pay_type: @order.pay_type }
end
assert_redirected_to store_path
end
也许你的授权失败了,并且在你发布的过程中没有创建订单?我如何检查自动化?我已经在谷歌上搜索过了,但是我找不到。你在过滤之前做了一些
,检查用户是否登录了吗?也许您的create
操作根本没有被调用?我也有同样的问题,但是Rails 4。原来我的固定装置中的付款类型是check
,而不是check
。你的是对的,但是你能确认你的其他装置是正确的吗?
post :create, order: {
address: @order.address,
email: @order.email,
name: @order.name,
pay_type: @order.pay_type
}
test "should create order" do
assert_difference('Order.count') do
post :create, order: { address: @order.address, email: @order.email, name: @order.name, pay_type: @order.pay_type }
end
assert_redirected_to store_path
end