Help us understand the problem. What is going on with this article?

rspecで例外が起きたことを確認する

この記事で書くこと :pen_ballpoint:

以下のような処理でのensureの処理が走ったかどうかを確認する方法

class Cat < ApplicationRecord
  validates :todays_foods, presence: true

  def sing!
    sing_a_song!
  ensure
    say_hello
  end

  def say_hello
    'にゃーん'
  end

  def sing_a_song!
    if todays_foods.empty?
      raise お腹が空いてたらエラー
      return
    end
    'にゃにゃにゃーん!'
  end
end

テストの中身

  describe '#sing!' do
     context 'with exception error,' do
       let!(:cat) do
         cat = build(:cat, name: 'お腹すいた猫', todays_foods: 0)
         cat.save(validate: false) # validatesを無効にして作成。
         cat
       end
       it 'say にゃーん.' do
         expect do
           cat.sing!
         end.to raise_error(ActiveRecord::RecordInvalid).and(eq('にゃーん'))
       end
     end
  end
xxl
「scheme手習い」という本が擦り切れるほど読むくらい好きです。今でも落ち込んだときは読みます。あの淡々としたやりとりをプログラムを書く時に自分も感じながら楽しんで作業しています。外向的な人間ではありませんが、よろしくお願いします。
https://twitter.com/nyaan74757915
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away