0
我是Rspec和FactoryGirl的新用於測試ROR應用程序的。我試圖測試一個模型類方法add_product(product_id)
,它仍然失敗,雖然它工作時,我在瀏覽器上嘗試相同。這裏是模型代碼:在Rails中使用Rspec和FactoryGirl測試模型的類方法
class Cart < ActiveRecord::Base
has_many :line_items, inverse_of: :cart
def add_product(product_id)
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)
end
current_item
end
end
下面是車模型的失敗規格:
describe Cart do
before(:each) do
@cart = FactoryGirl.create(:cart)
@product = FactoryGirl.create(:product)
@line_item = FactoryGirl.create(:line_item, product_id: @product.id, cart_id: @cart.id)
end
it 'increases the quantity of line_item when a similar product is added' do
lambda {@cart.add_product(@product.id)}.should change {@line_item.quantity}.by(1)
end
end
這種失敗,我從Rspec的Failure/Error: lambda {@cart.add_product(@product.id)}.should change {@line_item.quantity}.by(1) result should have been changed by 1, but was changed by 0
得到這樣的信息
感謝@Eric的快速反應,但測試後持續仍無法'current_item'有另一種方式我可以重新寫入執行相同的測試規範? –
當然你可以做'@ cart.add_product(@ product.id).quantity.should eq 2' 這種方法的問題是,它不會測試你的項目是否以這種方式持續存在。它只是測試你的邏輯工作。 –
我只是想測試邏輯,我有項目堅持在我的代碼的不同部分,我會測試它是如何堅持在那一部分。你的答案就是我一直在尋找的東西。 –