前提・実現したいこと
お世話になっております。
やりたいこととして、
テスト対象内のインスタンス変数にActiveRecordのデータが入っており、
その中身が想定通りのものかのテストを行いたいです。
rspecのコード
Hoge.create!(id:1, name: 'TAROU') post :index, params:{hogehoge:~} x = Hoge.where(id:1) expect(assigns(:hoge)).to eq x
以上のようなコードで想定通りのデータが登録されているか確認しようと試みましたが、
うまくいきませんでした。
specのログには
expected: #<ActiveRecord::Relation[#Hoge id: 1~] got: #<ActiveRecord::Relation[#Hoge id: 1~] -[#Hoge:0x0000000f0dd~ +[#Hoge:0x0000000f011~ id:1 name:"TAROU"
のような感じで表示されていてデータの中身が一致していないという訳ではなく別の理由だと思うのですが...
よろしくお願い致します。
試したこと
x = Hoge.new(id:1, name: 'TAROU')
expect(assigns(:hoge)).to contain_exactly x
としたら通りましたが
Hoge.create!(id:2, name: 'ZIROU')を追加して
x = [Hoge.new(id:1, name: 'TAROU'),Hoge.new(id:2, name: 'ZIROU')]
expect(assigns(:hoge)).to contain_exactly x
としたら通りませんでした。
(テスト対象の@hogeが集合の場合にも対応したいです)
@hoge側のwhereで配列で返ってくるのを失念していたので
y=[]
a = Hoge.new(id:1 ~)
b = Hoge.new(id:2 ~)
y.push(a)
y.push(b)として
xpect(assigns(:hoge)).to match_array y
としましたが中身の要素の内容が異なっていても通ってしまいました。
回答1件
あなたの回答
tips
プレビュー