Rails测试:会话机制创建新的购物车而不是使用夹具

时间:2011-07-12 04:04:13

标签: ruby-on-rails-3 session testing

我是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.destroy

respond_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和我的会话机制可以一起工作并通过测试?

1 个答案:

答案 0 :(得分:0)

用于请求的session个变量的控制器操作takes a second hash

delete :destroy, { :id => @line_item.to_param }, { :cart_id => @cart.id }