0

コントローラーでRspecのこの行をテストしようとしています:

@dreams = Dream.public_dreams.includes(:user).where("users.type_id = ?", 5)

コントローラーテストで次の行でテストするために使用しています:

Dream.public_dreams.select { |dream| dream.user.type_id = 5 }.should eq(@dreams)

ただし、次のエラーが発生します。

expected: nil, got [] (compared using ==)
4

1 に答える 1

1

@dreamsはインスタンス変数です。つまり、クラスに関連付けられています。コントローラーのは、テスト@dreamsの と同じではありません。@dreamsRuby では、設定されたことのないインスタンス変数への参照はすべて になりますnil

次のようにしてテストを「修正」できます

Dream.public_dreams.select { |dream| dream.user.type_id = 5 }.should eq([])

しかし、おそらくその配列に何かが必要です。テスト環境のデータベースにデータがないため (または単にその ID がないため)、おそらく何も返されません。

于 2013-10-25T20:02:35.047 に答える