3

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でどのように合格したかについて、私は興味があります。

4

2 に答える 2

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))

更新: リレーションは遅延読み込みパターンを提供するため、ステップで実行されたクエリはありません。これは、最初のリクエストでクエリを起動することを意味します

于 2011-09-08T10:25:45.247 に答える
1

配列を比較したい場合は、次のように書く必要があります

 assigns(:schools).all.should =~ School.populated.all
于 2011-09-08T22:49:49.913 に答える