【发布时间】:2011-09-09 14:06:34
【问题描述】:
我有一个获取 ActiveRecord 范围的控制器索引测试。 目前的测试看起来像这样(包括一些内联调试的东西):
describe "GET index" do
it "assigns all schools as @schools" do
get :index
puts assigns(:schools).class
puts School.populated.class
assigns(:schools).should == School.populated
end
end
输出是这样的:
ActiveRecord::Relation
ActiveRecord::Relation
expected: []
got: [] (using ==)
Diff:
这绝对不是我第一次在最近版本的 Rails 和 rSpec 中遇到这种情况。
以前,同事只会将项目包装在 to_a 中进行比较,我觉得这有点脏,可能不是一个好的解决方案。
有什么想法吗?我很好奇为什么它认为它们是不同的,以及相同的测试是如何在旧版本的 Rails 和/或 rSpec 中通过的。
【问题讨论】:
-
您要验证类或对象的数量吗? Relation 提供了延迟加载,因此您在该步骤上没有任何执行的查询
-
啊,是的,我明白了,所以使用
.all或.to_a之类的东西会调用查询? -
是的,延迟加载意味着在第一次请求时触发查询
-
如果你能把它变成一个答案,我很乐意接受! :)
标签: ruby-on-rails rspec rspec-rails