1

Rails 3.2.6 モデルの通常のcounter_cacheセットアップが完了しました。Web アプリケーションでは問題なく動作しますが、単体テストでは失敗します。

次のスニペットは、当面の問題を示しています。

test "counter_cache ..." do
    u = FactoryGirl.create(:customer)
    FactoryGirl.create(:order, :customer => u)

    # u.orders.count == 1; rest is always 0
    assert_equal u.orders.count, u.orders_count  # FAILS!
    assert_equal u.orders.count, u.orders.size   # FAILS!
    assert_equal u.orders.count, u.orders.length # FAILS!
end

FactoryGirl を使用せずに同じことを試みたが、それでも失敗したことに注意してください。

単体テストで counter_cache が正しく更新されるようにするにはどうすればよいですか?

4

1 に答える 1

3

問題は、uそれに属する注文が作成されたことを認識していないため、それを反映するように状態を更新していないことです。少なくとも 2 つのオプションがあります。

  • reloadu注文が追加されたことを認識していないため、注文を作成した後の User インスタンス ( ):

    u.reload
    
  • ユーザーを介して注文を作成します。

    u.orders << FactoryGirl.build(:order)
    

    (これは、持っている場合、または持っていない場合でも、少し気難しいかもしれませんafter_create。FactoryGirl はやりすぎて、時々物事を台無しにする可能性があります)。

于 2012-10-06T14:31:46.583 に答える