rspec ==/eqlは「同じ」ことを比較できません
-
27-10-2019 - |
質問
ActiverCordの範囲を取得するコントローラーインデックステストがあります。テストは現在、このように見えます(インラインデバッグを含むものを含む):
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でどのように渡されたかについて興味があります。
解決
EQL と同じです ==. 。 RSPEC Talksの著者は使用しないだけです !=, 、 使用する いけない 代わりは
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))
アップデート: :関係は怠zyな負荷パターンを提供するため、ステップで実行されたクエリはありません。これは、最初のリクエストでクエリの火災を意味します
他のヒント
配列を比較したい場合は、書く必要があります
assigns(:schools).all.should =~ School.populated.all
所属していません StackOverflow