火曜日, 4月 29, 2025
ホームニューステックニュースRSpecでbinding.pryを使おうとしたらなぜが止まらない現象について(初学者向け) #Gemfile - Qiita

RSpecでbinding.pryを使おうとしたらなぜが止まらない現象について(初学者向け) #Gemfile – Qiita



RSpecでbinding.pryを使おうとしたらなぜが止まらない現象について(初学者向け) #Gemfile - Qiita

gempry-railspry-byebugを導入しているにも関わらず、binding.pryが機能していない状態。itブロックにも確実に定義している。
参考記事:Rspecでbindingを使って変数の中身を調べる方法
今回は例としてusersテーブルにcreateした時、presence: trueを定義したカラムがnilだった場合、バリデーションエラーが機能するかをテストします。
※今回はあえてcreateにタイポをさせています。

user_spec.rb

describe 'バリデーションチェック'
  it 'nameが空だった場合、バリデーションエラーが入る' do
    user = User.craete(name: "hogehoge", age: 20, email: "hoge@example.com")
    # ここにbinding.pryを定義してみる
    binding.pry
    expect(user).to be_invalid
  end

エラーが発生したコードの後にbinding.pryを記述していた

エラーが発生したタイミングでit内の処理は中断されます。そして次に定義したitが呼び出されるので、エラーコードの後に書いたbinding.pryはスルーしてしまいます。

user_spec.rb

describe 'バリデーションチェック'
  it 'nameが空だった場合、バリデーションエラーが入る' do
    # createのタイポによるメソッド未定義エラー
    user = User.craete(name: nil, age: 20, email: "hoge@example.com")
    # ここで処理がストップする。binding.pryは呼び出されない。
    binding.pry
    expect(user).to be_invalid
  end
  # 次のitに移行する。
  it 'ageが空だった場合、バリデーションエラーが入る' do
     user = User.create(name: "hogehoge", age: nil, email: "hoge@example.com")
     expect(user).to be_invalid
  end

エラーが出てしまった後でもすべてのitブロックが呼び出されていたので、エラーが発生してもすべてのコードを読み込んでくれていると勘違いしていました。
通常だとエラーが発生した時点ですぐにエラー画面が表示するので、「ここで処理が止まっているんだな」と視覚的にわかりやすいのですが…
今回の現象でエラーが出てしまった時の挙動について、少し理解が深まったかなと思います。

binding.pryが使えない原因としてGemfileの記述場所が違う可能性もあります。(私も間違えていました)

Gemfile

# 開発環境とテスト環境で使用するgem
group :development, :test do
  gem 'byebug', platforms: %i[mri mingw x64_mingw]
  gem 'rspec-rails'
  gem 'factory_bot_rails'
  # 本来はここに'pry-rails'と'pry-byebug'を定義する
end
# 開発環境のみ使用するgem
group :development do

  gem 'pry-rails'
  gem 'pry-byebug'

end

rspecはテスト環境で使用しているので、group :developmentの方に定義してしまうとbinding.pryは未定義のメソッドだよ!とエラーが出てしまいます。
なのでgemを導入する時は、役割を理解してそれぞれのグループに配置する必要がありますね!



フラッグシティパートナーズ海外不動産投資セミナー 【DMM FX】入金

Source link

Views: 0

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -

Most Popular

Recent Comments