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