我有一个获得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中如何通过相同的测试。
答案 0 :(得分:1)
eql 与 == 相同。 Rspec会谈的作者只使用!= ,使用 should_not 代替
actual.should == expected
#is interpreted as this:
actual.should.==(expected)
#This is not true for !=. Ruby interprets this: actual.should != expected
#as follows:
!(actual.should.==(expected))
更新:Relation提供了延迟加载模式,因此您没有对该步骤执行任何查询。这意味着在第一次请求时触发查询
答案 1 :(得分:1)
如果要比较数组,则应编写
assigns(:schools).all.should =~ School.populated.all