†でおきしブログ†

ウナギ食べたいヽ(•̀ω•́ )ゝ✧

Rspecのmatch_array又はcontain_exactlyで右辺のStructの配列が文字列になる謎に悩まされた

ruby 2.6.2
rails 5.1.1
rspec 3.5.8

let(:foge) { Struct.new('foge', :test, keyword_init: true) }
let(:foges) do
  [
    foge.new(test: 'test')
    foge.new(test: 'test2')
  ]
end

it do
  expect(hoge).to match_array foges
end

hogeはfogesと同じStructの配列が入ってる(順不同)

なのでこれでテスト通ると思ったのだが、何故かfogesの中身がStructの文字列になってしまってエラーになった…

["#<struct Struct::foge test=\"test\">"]

どうやっても文字列になる。試しにStruct以外(create(:xxx)とか)を配列に入れるとちゃんとオブジェクトになっている。

もうわからんかったので…

let(:foge) { Struct.new('foge', :test, keyword_init: true) }
let(:foge1) { foge.new(test: 'test') }
let(:foge2) { foge.new(test: 'test2') }

it do
  expect(hoge.to_s).to include foge1.to_s, foge2.to_s
end

文字列のincludeで回避した


f:id:deokisikun:20210807103045p:plain