我正在编写我的第一个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文件,但我确定这个这是一个新手问题,不需要它!
提前致谢,
斯图
答案 0 :(得分:1)
您正在修改订单项的数量属性,但不保存更改。 在父级上调用save不会保存子级的属性。 您可以在增量行后面的add_product方法中调用current_item上的save。
if current_item
current_item.quantity += 1
current_item.save
else