Ruby on rails 如何确保在rails单元测试中正确更新计数器缓存?
我已经为我的Rails 3.2.6模型设置了一个正常的Ruby on rails 如何确保在rails单元测试中正确更新计数器缓存?,ruby-on-rails,unit-testing,ruby-on-rails-3.2,minitest,counter-cache,Ruby On Rails,Unit Testing,Ruby On Rails 3.2,Minitest,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
计数器缓存。它在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的情况下尝试了同样的方法,但仍然失败了
如何确保计数器缓存在单元测试中正确更新?问题在于u
不知道创建了属于它的订单,因此它没有更新其状态以反映这一点。您至少有两种选择:
在创建订单后重新加载用户实例(u
),因为它不知道添加了订单:
u.reload
- 通过用户创建订单:
u.orders << FactoryGirl.build(:order)
美国订单太棒了!两种变体都能正常工作。