詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Ruby の書き捨てスクリプトのテストカバレッジを取る #ruby

1 ファイルのスクリプトとして最初書かれた git-browse-remoteリファクタリングするときに直面したのが、テストとカバレッジはどうやって取るんだ? という問題(そもそもテストもなかった)。うまく調べられなかったのだけれど、結局、いろいろやっているうちにうまく取れるようになった。

普通に simplecov を使うだけだと結果のマージがうまくいかないようなので、以下のように SimpleCov.lap メソッドを追加。

  module SimpleCov
    def self.lap
      if running
        @result = SimpleCov::Result.new(Coverage.result.merge_resultset(SimpleCov::ResultMerger.merged_result.original_result))
        SimpleCov::ResultMerger.store_result(@result)
      end
    end
  end

https://github.com/motemen/git-browse-remote/blob/be8091463c6535f47a2fb927b0daa040c11d8af6/spec/bin_spec.rb#L9-L16

SimpleCov.start してからスクリプトを load して、終わったら SimpleCov.lap

def git_browse_remote(args)
  begin
    SimpleCov.start unless ENV['CI']
    ARGV.replace(args)
    load ROOT + 'bin/git-browse-remote', true
    true
  rescue
    false
  ensure
    SimpleCov.lap unless ENV['CI']
  end
end

https://github.com/motemen/git-browse-remote/blob/be8091463c6535f47a2fb927b0daa040c11d8af6/spec/bin_spec.rb#L115-L126

これでだいたいカバレッジが取れるようになり、テストも書けました。Kernel.exec を書き換えたりちょっと面倒なこともしている。

はてなで一緒に働きませんか?