你好,我的单元测试通过时遇到了一些问题。具体来说, * cart_test.rb * 中的那些失败了。
test "add two different items" do
cart = Cart.create
book_one = products(:one)
book_two = products(:two)
cart.add_product(book_one.id).save!
cart.add_product(book_two.id).save!
assert_equal 2, cart.line_items.size
assert_equal book_one.price + book_two.price, cart.total_price
end
test "add two unique items" do
cart = Cart.create
ruby_book = products(:ruby)
cart.add_product(ruby_book.id).save!
cart.add_product(ruby_book.id).save!
assert_equal 2*ruby_book.price, cart.total_price
assert_equal 1, cart.line_items.size
assert_equal 2, cart.line_items[0].quantity
end
这是我的存储库:https://github.com/zackster/Agile-Web-Development-w--Rails----DEPOT-application
有人可以帮我理解发生了什么吗?我相信测试失败了,因为这些项目实际上并没有被添加到购物车中,但它可能完全是另一回事[我是铁路新手]。 。 。谢谢!
答案 0 :(得分:2)
CartTest测试失败,因为在Cart :: add_product中,您实际上并没有将新的line_item绑定到购物车 - 只是使用原始LineItem.create
创建孤立的line_items。要绑定到购物车,您可以更改创建与购物车无关的LineItem的行:
current_item = LineItem.new(:product_id => product_id, :price => product_price)
在当前购物车的line_items集合中实际创建新订单项:
current_item = line_items.create(:product_id => product_id, :price => product_price)
还有其他一些你没有特别询问的失败,但无论如何我都调查了它们......
您的products.yml未指定id字段,因此在运行灯具时,line_items.yml中的product_id为1并不会最终引用任何产品。您可以在products.yml中对id: 1
等进行硬编码以解决此问题。
接下来,CartsControllerTest中只有一个拼写错误 - @cart_id
未定义,而应该是@cart.id
最后,它揭示了另一个问题,这实际上是一个逻辑问题。现在,您销毁产品的测试失败了,但这实际上是因为您的逻辑不允许您销毁具有line_items的产品(一旦我们修复了products.yml文件以指定了ID,您的产品就会这样做)。所以......我认为真的是测试错了,代码就在那里。