LoginSignup
0
0

More than 3 years have passed since last update.

ターミナルのコンソール内においてテストコードのエラーメッセージが表示されない時の対処法

Posted at

きっかけ

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をかけた場合は、むやみやたらにパラムスの値やエラーメッセージを求めるのではなく、通常のコントーラーでの動きと同じように順番を確認しながら進めるとコンソールは望みを叶えてくれる。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0