我是Rails的新手,正在关注“使用Rails进行敏捷Web开发”一书。目前我正在测试我的购物车和订单项。
在我的灯具中,我有2个订单项。我在测试中删除了一个,因此还有一个保留在购物车中。 但是我认为由于我的会话机制,控制器现在使用新的空车而不是夹具车。这导致我的测试失败。
在我的* application_controller.rb *
中 def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
en
在我的* line_items_controller.rb中*我有:
def def @line_item = LineItem.find(params [:id]) @ line_item.destroyrespond_to do |format|
if current_cart.line_items.empty?
format.html { redirect_to(store_url, :notice => 'Your cart is empty') }
else
format.html { redirect_to(current_cart, :notice => 'Item removed' )}
end
format.xml { head :ok }
end
端
在我的* functional \ line_items_controller_test.rb中*我有:
test "should destroy line_item" do
assert_difference('LineItem.count', -1) do
delete :destroy, :id => @line_item.to_param
end
assert(!@cart.line_items.empty?,'Cart should not be empty')
if @cart.line_items.empty?
assert_redirected_to store_url #this was the redirection result
else
assert_redirected_to cart_path(@cart.id) #but should be this redirection
end
end
代码在真实环境中工作,只是测试失败。
如何修改我的测试&代码,所以fixture-cart和我的会话机制可以一起工作并通过测试?
答案 0 :(得分:0)
用于请求的session
个变量的控制器操作takes a second hash。
delete :destroy, { :id => @line_item.to_param }, { :cart_id => @cart.id }