Ruby2.6アドベントカレンダーの24日目の記事です。
Coverage
https://bugs.ruby-lang.org/issues/15022
Coverage.start
に :oneshot_lines
キーワード引数追加
Coverage はそれぞれの行を何回実行したかを数えていたんですが、たいていの場合は実行したかどうかが重要で何回実行したかはそんなに重要じゃないだろうってことで、oneshot_lines: true
を指定すると実行した行番号だけを出力するようになります。
hoge.rb:
1: def hoge 2: 10.times do 3: nil 4: end 5: true 6: end
require 'coverage' Coverage.start require '/tmp/hoge.rb' hoge Coverage.result #=> {"/tmp/hoge.rb"=>[1, 1, 10, nil, 1, nil]}
1, 2, 5行目が1回、3行目が10回実行されたことを示しています。
require 'coverage' Coverage.start(oneshot_lines: true) require '/tmp/hoge.rb' hoge Coverage.result #=> {"/tmp/hoge.rb"=>{:oneshot_lines=>[1, 2, 3, 5]}}
1, 2, 3, 5行目が実行されたことがわかります。
Coverage.result
に :stop
, :clear
キーワード引数追加
:stop
が真の場合はカバレッジ測定を終了します(デフォルト)。偽の場合は測定を継続します。
:clear
が真の場合は測定結果をリセットします。偽の場合は結果を保持します(デフォルト)。
Coverage.result(stop: false) #=> {"/tmp/hoge.rb"=>{:oneshot_lines=>[1, 2, 3, 5]}} Coverage.result(stop: false, clear: true) #=> {"/tmp/hoge.rb"=>{:oneshot_lines=>[1, 2, 3, 5]}} Coverage.result(stop: true) #=> {"/tmp/hoge.rb"=>{:oneshot_lines=>[]}} Coverage.result #=> coverage measurement is not enabled (RuntimeError)
Coverage.line_stub
追加
指定したファイルの各行が有効な行(0)か無意味な行(nil)かを示す結果を返します。実行はされません。
hoge.rb:
1: # コメント 2: def hoge 3: 123 4: end 5: 6: hoge
require 'coverage' Coverage.line_stub("hoge.rb") #=> [nil, 0, 0, 0, nil, 0]
コメント行(1行目)と空行(5行目)が無意味な行であることがわかります。