I sent an email to CodeClimate, and they replied with an extremely helpful response!
tl;dr
I was calling SimpleCov.start instead of CodeClimate::TestReporter.start, which meant that my /vendor and /spec directories were being included in the analysis.
I needed to replace my test coverage reporters section of spec_helper.rb with:
# Test coverage reporters
require 'codeclimate-test-reporter'
CodeClimate::TestReporter.start
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
SimpleCov::Formatter::HTMLFormatter,
CodeClimate::TestReporter::Formatter
]
Actual Response
Hey Lee-
Thanks for the detailed email. I did some digging on my end, and I believe I see what's happening here. This comes down to different exclusions being applied in different testing environments. Broadly speaking, the reason you're seeing such a high LOC in Travis is because coverage data for files in your /vendor and /spec folder ARE being included in the LOC count. I've explained below how to exclude these directories when Travis runs your builds and POSTs Code Climate coverage data.
To investigate this, I first looked over your spec_helper.rb file in GitHub, and I noticed one thing that was different from what Code Climate typically requires. Specifically, I saw that SimpleCov.start was being called instead of CodeClimate::TestReporter.start. That can cause a number of different problems, one of which is that the file exclusions we typically apply aren't triggered. That is, normally our reporter auto-excludes coverage data from all /vendor and /spec directories -- however, if you don't call CodeClimate::TestReporter.start then our exclusions won't kick in. In most cases, you won't want these directories included, since they don't represent code that you've written.
To correct this, I went ahead and forked your repository, and then added my fork to Travis. I then made some changes to the project's spec_helper.rb file, as seen here: https://github.com/jonathancadepowers/rescuetime/blob/master/spec/spec_helper.rb Note that I'm starting the Code Climate reporter (on Line 3) and that I'm no longer starting SimpleCov directly. Since Code Climate's Ruby test reporter is actually just a thin wrapper around SimpleCov, you don't need to directly start SimpleCov (the HTML report from SimpleCov should still get generated each time you run your tests).
After making my changes, I ran a build in Travis. Since your .travis.yml lists four different versions of Ruby, this resulted in four separate build jobs. For all of them, the line count dropped down to 30 (since our exclusions are now triggered) and you now have 100% coverage. See Line 152 here: https://travis-ci.org/jonathancadepowers/rescuetime/jobs/59266389#L152
My Travis build POSTed your Code Climate instance coverage data, so you now have 100% coverage there as well: https://codeclimate.com/github/leesharma/rescuetime
Of course, 56 doesn't equal 30. That said, I think I see why that's the case as well. I noticed from earlier payloads that Travis had sent us for your project that not only were /vendor files being included in the coverage payloads, but coverage data for files in your /spec folder were included as well. Digging in deeper, I saw that two specific /spec files were included: spec/unit/activities_spec.rb (11 total lines) and spec/unit/client_spec.rb (15 total lines). So: 56 - 11 - 15 = 30. That is, I would bet that locally /vendor is being excluded when you run your tests, but /spec is not. If you make the spec_helper.rb changes that I recommended above, both /vendor and /spec will be filtered out, taking you down to 30. So, 30 is probably the correct number here, not 56.
You should just be able to make the spec_helper.rb changes that I mentioned above to correct this issue. Of course, if there's anything else that I can help with, just let me know. Sorry again for the confusion here.
Thanks,
-Jonathan