1

我已经counter_cache为我的 Rails 3.2.6 模型进行了正常设置。它在 webapp 中完美运行,但在单元测试中失败。

以下片段说明了手头的问题:

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不知道创建了属于它的订单,因此它没有更新其状态以反映这一点。你至少有两个选择:

  • reload创建订单后的用户实例 ( u),因为它不知道添加了订单:

    u.reload
    
  • 通过用户创建订单:

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

    (如果你有 ,这个可能有点挑剔after_create,或者即使你没有——FactoryGirl 可能做的太多,有时会把事情搞砸)。

于 2012-10-06T14:31:46.583 回答