在Rails测试中更新ActiveRecord

时间:2011-07-05 18:52:29

标签: ruby-on-rails ruby activerecord

我正在编写我的第一个Rails'Store'应用程序,我在我的一个测试中遇到了一些奇怪的东西。我正在尝试在cart.rb上测试add_product方法:

    class Cart < ActiveRecord::Base
  has_many :line_items, :dependent => :destroy

  def add_product(product)
    current_item = line_items.find_by_product_id(product.id)
    if current_item
      current_item.quantity += 1
    else
      current_item = line_items.build(:product_id => product.id, :price => product.price)      
    end
    current_item
  end

  def total_price 
    line_items.to_a.sum { |item| item.total_price }
  end

end

我正在测试将同一产品添加到购物车两次会增加数量而不是添加新行(line_item)。这是测试:

test "line item quantity is increased when duplicate product is added" do
    cart = carts(:one)
    ruby_book = products(:ruby)

    cart.add_product(ruby_book)
    cart.save    
    assert_equal 1, cart.line_items(ruby_book).to_a.count

    cart.add_product(ruby_book)
    cart.save
    assert_equal 1, cart.line_items(ruby_book).to_a.count
    assert_equal 2, cart.line_items(ruby_book).first.quantity # fail!
  end

我在最后一个断言中失败了。数量为1,我希望2.我已经检查了test.log文件,并且没有对我的sqlite3实例运行更新...如果需要,我可以添加日志或Fixtures文件,但我确定这个这是一个新手问题,不需要它!

提前致谢,

斯图

1 个答案:

答案 0 :(得分:1)

您正在修改订单项的数量属性,但不保存更改。 在父级上调用save不会保存子级的属性。 您可以在增量行后面的add_product方法中调用current_item上的save。

if current_item
  current_item.quantity += 1
  current_item.save
else