在Rails测试中更新ActiveRecord

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

class Cart  :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文件,但我确定这个这是一个新手问题,不需要它!

提前致谢,

斯图

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

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