【发布时间】:2013-10-24 20:59:32
【问题描述】:
我正在尝试创建一个功能测试来测试我的一个控制器中的 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> expected but was
<2>.
所以,我很确定这意味着我的功能测试无法下订单。这是我的测试:
setup do
@order = orders(:one)
end
test "should create order" do
assert_difference('Order.count') do
post :create, order: @order.attributes.slice(Order.accessible_attributes)
end
assert_redirected_to store_url
end
我的订单夹具:
one:
name: Dave Thomas
address: MyText
email: dave@example.org
pay_type: Check
还有我的 Order#create 控制器:
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>
如果有人能帮我解决这个功能测试,我将不胜感激。欢迎任何和所有输入。
【问题讨论】:
-
也许您的授权失败并且在您的 POST 期间没有创建订单?
-
我将如何检查自动化?我用谷歌搜索了它,但我找不到它。
-
你有没有做一些
before_filter来检查用户是否登录?也许您的create操作根本没有被调用? -
我遇到了同样的问题,但在 Rails 4 中。结果我的夹具中的 pay_type 是
check而不是Check。你的是对的,但你能验证你的其他灯具是正确的吗?
标签: ruby-on-rails ruby-on-rails-3