我为Rails 3.2.6模型设置了正常的counter_cache
。它在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?
答案 0 :(得分:3)
问题是u
不知道创建了属于它的订单,因此它没有更新其状态以反映这一点。您至少有两个选择:
reload
用户实例(u
),因为它不知道已添加订单:
u.reload
通过用户创建订单:
u.orders << FactoryGirl.build(:order)
(如果你有一个after_create
,这个可能有点挑剔,或者即使你没有 - FactoryGirl可以做太多而且有时搞砸了。)