18917


simplecovでrailsプロジェクトのテストカバレッジを計測しようとしています。  
rspecを実行したところ、coverageディレクトリが生成されて結果は出ているのですが、まだ明らかにテストが不足しているにもかかわらず、カバレッジが100%になってしまいます。

原因を調べるために出力を確認したところ、そもそもカバレッジを測定する対象が変な気がします。

例えば、今調査しようとしているプロジェクトにはこれくらいのファイルがあるのですが、  
[![railsプロジェクトでのmodelディレクトリ](https://i.stack.imgur.com/csgUV.png)](https://i.stack.imgur.com/csgUV.png)  
simplecovは、たった一個のファイルを見て、カバレッジが100%だと言っているように見えます。

[![simplecovの出力](https://i.stack.imgur.com/OuWmE.png)](https://i.stack.imgur.com/OuWmE.png)

※ちなみにこのspots_tag.rbに対するテストは書かれていません:-)

何かが根本的におかしい気がするのですが、こんな事が起きてしまう事例とかありますか？

Gemfile

[code]

    group :test do
      gem 'simplecov', :require => false
    end
    
[/code]

spec_helper.rb

[code]

    require 'devise'
    require 'simplecov'
    
    # save to CircleCI's artifacts directory if we're on CircleCI
    if ENV['CIRCLE_ARTIFACTS']
      dir = File.join(ENV['CIRCLE_ARTIFACTS'], "coverage")
      SimpleCov.coverage_dir(dir)
    end
    SimpleCov.start 'rails'
    
    RSpec.configure do |config|
      :
    
[/code]


CC BY-SA 3.0
2015-11-16T12:11:29.760
18903
2017-05-10T08:41:33.117
13276
question
ruby-on-rails
simplecovがほとんどのファイルを無視してしまう


track_filesの設定を追加するとよさそうです。

> Coverage results will always include files matched by this glob, whether or
> not they were explicitly required. Without this, un-required files will not
> be present in the final report.  
>
> <http://www.rubydoc.info/gems/simplecov/SimpleCov%2FConfiguration:track_files>

Rails向けの設定ではデフォルトでは`"{app,lib}/**/*.rb"`が設定されています。  
<https://github.com/colszowka/simplecov/blob/v0.14.1/lib/simplecov/defaults.rb#L39>

なので、Railsをお使いの場合は`SimpleCov.start 'rails'`でカバレッジが測れると思います。

track_filesの設定が追加される前のバージョンを使っている場合は以下の方法で解決できそうです。

* * *

simplecovはファイルが評価されていない場合、トラッキングしてくれません。

config/environments/test.rbで`config.eager_load =
true`を設定するか、spec_helper.rb中に`Rails.application.eager_load!`を追加するとよいと思います。  
この設定をするとeager_load_pathsに登録されているファイルを(例えテスト中で使われてなくても)事前に読み込むようになります。

読み込まれいないファイルが有る場合、eager_load_pathsにファイルを追加してeager_loadされるようにするかspec_helper.rbの中などで自分でrequireしましょう。

## 参考

> The Coverage module tracking files as they are evaluated, i.e. when they are
> loaded and when any code in them is executed. Hence, it doesn't track files
> that aren't loaded.  
>  <https://github.com/colszowka/simplecov/issues/16#issuecomment-50989568>
>
> config.eager_loadをtrueにすると、config.eager_load_namespacesに登録された事前一括読み込み(eager
> loading)用の名前空間をすべて読み込みます。ここにはアプリケーション、エンジン、Railsフレームワークを含むあらゆる登録済み名前空間が含まれます。  
>
> <http://railsguides.jp/configuring.html#rails%E5%85%A8%E8%88%AC%E3%81%AE%E8%A8%AD%E5%AE%9A>


CC BY-SA 3.0
2015-11-17T01:01:52.757
18917
2017-05-10T08:41:33.117
2017-05-10T08:41:33.117
2599
2599
18903
answer