0

これが私のモデルの関連セクションです:

  belongs_to :cart
  belongs_to :product
  validate :quantity, :more_than_stock,  :message => "more than in stock is reserved." 

 def more_than_stock
    errors.add(:quantity, "should be less than in stock") if self.quantity > self.product.stock
  end

私はこの行でエラーを出し続けています:メソッドerrors.add(:quantity, "should be less than in stock") if self.quantity > self.product.stockに関して.stock

私が得続けるエラーは次のとおりです:1) Error: test_product_id_must_be_a_number(CartRowTest): NoMethodError: undefined method 'stock' for nil:NilClass私のテストで。

.stock私のテストスイートは製品のメソッドを知らないようです。

ただし、これが私の製品工場です。

factory :product do
    name 'Cholecap - 100mg'
    limit 3
    stock 10
  end

と私のcart_rowファクトリー:

 factory :cart_row do
    product
    cart
    quantity 3
  end

エラーをスローするユニットテストの関連部分は次のとおりです。

def setup
    @cart_row = FactoryGirl.create(:cart_row)
  end

  test "product_id must not be blank" do
    @cart_row.product_id = "         "
    assert !@cart_row.valid?
  end

test "product_id must be a number" do
     @cart_row.product_id = '234'
    assert !@cart_row.valid?
  end

テストスイートに.stockメソッドについて知らせるために何をする必要がありますか?

4

1 に答える 1

1

product_id を無効な値に設定したため、テスト スイートに #stock メソッドを認識させることができません。これらのテストに合格したい場合は、次のコードを試してください。

belongs_to :cart
belongs_to :product
validates_associated :product
validate :quantity, :more_than_stock, message: "more than in stock is reserved." , if: "product.respond_to? :stock"

def more_than_stock
  errors.add(:quantity, "should be less than in stock") if quantity > product.stock
end
于 2012-09-01T06:38:24.700 に答える