0

RORアプリケーションをテストするためのRspecとFactoryGirlは初めてです。モデルクラスのメソッドをテストしようとしてadd_product(product_id)いますが、ブラウザーで同じことを試しても機能しますが、失敗し続けます。モデルのコードは次のとおりです。

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

4

1 に答える 1