Ruby on rails 测试rails计数器缓存的更好方法?

Ruby on rails 测试rails计数器缓存的更好方法?,ruby-on-rails,ruby-on-rails-3,rspec,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 3,Rspec,Ruby On Rails 4,在RSpec中测试rails计数器缓存是否有比此更好/更简单的方法: let(:question) { create(:question) } it "has a counter cache" do expect { create(:answer, question_id: question.id, user_id: question.user.id) }.to change { question.reload.answers_count }.by(1) end

在RSpec中测试rails计数器缓存是否有比此更好/更简单的方法:

let(:question) { create(:question) }

it "has a counter cache" do
  expect {
    create(:answer, question_id: question.id, user_id: question.user.id)
  }.to change {
    question.reload.answers_count
   }.by(1)
end

另外,在工厂使用
#create
而不是
#build
是否是一种良好的做法?因为仅仅构建它会抛出一个错误(因为工厂的必填字段不会设置为build)。

我通常不相信测试核心rails特性,因为它们已经从框架中构建了大量测试用例。似乎您正在按原样使用
计数器\u缓存
。。。您甚至可以引用与此相关的ActiveRecord的实际测试用例,并根据您的目的对其进行调整。很抱歉,我不能提供其他帮助,但也许这可以帮助你在晚上睡觉?老实说,我可以选择任何一种方式。您正在尝试测试它是否以您认为的方式正确应用于您的模型。在这和测试rails功能本身之间有一条很好的界限……在我的公司,我们做的事情像
It{is_'expected.to归属于(:channel)}
,我不知道这是否是一个最佳实践,但它是由rspec直接支持的,如果有人正在清理文件并且不小心从模型中删除了一行,它就会崩溃。