きっかけ
items_controllers.rb
it "郵便番号が空では登録できないこと" do
@user_item.postal_code = nil
binding.pry
@user_item.valid?
expect(@user_item.errors.full_messages).to include("Postal code can't be blank")
end
コントローラー内において、上記のような記述をして、ターミナルにてエラーメッセージを取得しようと思ったら、下のような結果が出た。
コンソール
[1] pry(#<RSpec::ExampleGroups::UserItem::Nested::Nested_2>)> @user_item.errors.full_messages
=> []
なぜ??
エラーメッセージが出ないということはバリデーションに問題があるのかと思ったが、原因はそこではなかった。
結論
binding.pryの記述する場所が間違っていた。
or
binding.pryをかけてからエラーメッセージにたどり着くまでの順番を間違えていた。
binding.pryをかけるとその箇所でPCの動きが止まるが、そこからコンソールで動かす場合は、順番が大切なのだった。むやみやたらにエラーメッセージをくれぇぇぇ!と言っても、パソコン様は動いてはくれない。
まずは、上記の場所にbinding.pryをかけた場合は、
コンソール
@item.valid?
という記述をコンソール上でしなくてはいけなかった。
そして、返り値がfalseだった場合に、初めて
コンソール
@item.errors.full_messages
を記述することでエラーメッセージが返ってくるようになる。
まとめ
binding.pryをかけた場合は、むやみやたらにパラムスの値やエラーメッセージを求めるのではなく、通常のコントーラーでの動きと同じように順番を確認しながら進めるとコンソールは望みを叶えてくれる。