gotagota日記

「面白きことは良きことなり」

rspec で raise_error を expect する時に

備忘録

rspec でバリデーションエラーが発生することをテストしたい場合、

expect(@facility.phone_numbers.create!(phone_number: '000-0000-00a1', main: true)).to raise_error(ActiveRecord::RecordInvalid)

ではなくて、

expect {@facility.phone_numbers.create!(phone_number: '000-0000-00a1', main: true)}.to raise_error(ActiveRecord::RecordInvalid)

としないといけない。
つまり、 expect() ではなくて、 {} で囲まないといけない。

所感

考えてみれば () だと単純に create! が失敗してるのでその時点でテストは終了してるから {} のブロックで囲んでその結果を expect しなければならないんだなあ。

参考URL