🐙
Ruby on Railsのデバック(raise 〇〇.inspect)の方法について
デバックとは
プログラムを書いて開発する時などに、エラーは必ず出てきます。
その際人間の目で見ることは限界があるので、デバックのツールや手法を使って、
開発者はコードの手直しをしていきます。
この記事の背景
Railsで開発をしている時に今まではbinding.pry
というデバックの手法しか知りませんでした。
今、入っているプロジェクトがbinding.pryを使わない案件でした。
そこで教わったのがraise 〇〇.inspect
を使った手法でした。
使い方
かなり省いていますが、以下がテストコードです。このコードを軸にデバックを説明していきます。
describe 'logテスト' do
subject { described_class.new.log(order) }
let(:order) do
{
:order_number=>"1",
:details=>[
["20230914", "1994", "株式会社Taro"]
]
}
end
#省略
以下がテスト対象のコードです。
def log(order)
order_detail = order.dig(:details, 0)
raise order.inspect
#省略
end
⚫︎補足
{}は連想配列(ハッシュ)
で[[]]は配列
です。
RSpecを実行すると以下のように出ます。Runtime/Error
が出れば
デバックはできています。
Failures:
#省略
Failure/Error: raise order.inspect
RuntimeError:
{:order_number=>"1", :details=>[["20230914", "1994", "株式会社Taro"]]}
# .〇〇.rb:87:in `log'
# .〇〇.rb:263:in `block (4 levels) in <top (required)>'
# .〇〇.rb:275:in `block (6 levels) in <top (required)>'
# .〇〇.rb:275:in `block (5 levels) in <top (required)>'
Finished in 0.06517 seconds (files took 10.54 seconds to load)
1 example, 1 failure
raise order.inspect
を入れたことで引数(order)の中身を見ることができます。
記事のタイトルの〇〇には引数が入ります。
今度はdetailの中身を見ていきます。
def log(order)
order_detail = order.dig(:details, 0)
raise order[:details].inspect#追記
#省略
end
これで :detailsの中身を見ることができます。
#省略
Failure/Error: raise order[:details].inspect
RuntimeError:
[["20230914", "1994", "株式会社Taro"]]
# .〇〇.rb:88:in `log'
# .〇〇.rb:263:in `block (4 levels) in <top (required)>'
# .〇〇.rb:275:in `block (6 levels) in <top (required)>'
# .〇〇.rb:275:in `block (5 levels) in <top (required)>'
Finished in 0.06826 seconds (files took 9.85 seconds to load)
1 example, 1 failure
Failed examples:
さっきと比べたらRuntimeErrorと比べたらdetailsの中身だけになっています。
detailsの中の"20230914"
のみを取得したい場合は以下のように追記します。
def log(order)
order_detail = order.dig(:details, 0)
raise order[:details][0][0].inspect#追記
end
# Failure/Error: raise order[:details][0][0].inspect
# RuntimeError:
# "20230905"
raise order[:details][0][1]
にすれば"1994"
が取得できます。
資料
デバックについて色々書いてあるので読んでみてください。
補足
2023年09月14日に投稿した記事です。都合上Zennに投稿しました。
Discussion