simplecov-tdd 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +18 -0
- data/README.md +62 -3
- data/example.gif +0 -0
- data/lib/simplecov/tdd.rb +76 -21
- data/lib/simplecov/tdd/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 678d4521b0050e2b500bf036c4e32031352bc1fa00ab8f2a9aecb7cd2125febd
|
4
|
+
data.tar.gz: 33b54df0fd182be3c66bd5bbc9131c4414ba6c158d4381c9959bcd4edd593203
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b08b96e78e4b3ae6aeceb124513e52fb2527394d50cde2858db863b8fb75c9eddb8142942784c12c81931359b256f7d1c815f6b3feab8f80209c95603ad5eeef
|
7
|
+
data.tar.gz: 48a4a28e253328074c0a2e05fe616d064e2257af0090830cbd760d44a27dc831e303739a722dad5308536987752057c9be4031fd93d2bfbcaf3947ed19b7480c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
0.2.0 (2019-03-06)
|
2
|
+
==================
|
3
|
+
## Features
|
4
|
+
* Added style_output configuration option. There are two options: [:simple, :verbose].
|
5
|
+
:simple is the default, while :verbose outputs line numbers along with source code that
|
6
|
+
is missing coverage.
|
7
|
+
* Added debug_mode configuration option for investigating mismatched filenames. Default is disabled
|
8
|
+
|
9
|
+
## Improvements
|
10
|
+
* Improved output of the current tested file to start with the app/ directory instead
|
11
|
+
of full path
|
12
|
+
* Slight optimizations done to the way the current filename is detected
|
13
|
+
* Better documentation added
|
14
|
+
|
15
|
+
## Bug fixes
|
16
|
+
* Files previously containing the phrase 'spec' as part of their name would be
|
17
|
+
improperly formatted. This caused these files to come up as mismatches.
|
18
|
+
|
1
19
|
0.1.0 (2019-02-20)
|
2
20
|
==================
|
3
21
|
## Features
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Simplecov::Tdd
|
2
2
|
|
3
|
-
A SimpleCov formatter for test driven development
|
3
|
+
A SimpleCov formatter for test driven development. Displays code coverage results in the console for single files
|
4
|
+
|
5
|
+

|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -21,15 +23,72 @@ Or install it yourself as:
|
|
21
23
|
## Usage
|
22
24
|
|
23
25
|
1. Ensure that you've configured your project to SimpleCov's _Getting Started_ section: https://github.com/colszowka/simplecov#getting-started
|
24
|
-
2. Set your
|
26
|
+
2. Set your SimpleCov configuration to the following:
|
25
27
|
|
26
28
|
```ruby
|
29
|
+
require "simplecov/tdd"
|
27
30
|
SimpleCov.formatter = Simplecov::Formatter::Tdd
|
31
|
+
# OR use multi-formatter
|
32
|
+
SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([
|
33
|
+
SimpleCov::Formatter::HTMLFormatter,
|
34
|
+
Simplecov::Formatter::Tdd
|
35
|
+
])
|
36
|
+
```
|
37
|
+
|
38
|
+
Simple Setup:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
# /spec/spec_helper.rb
|
42
|
+
require "simplecov"
|
43
|
+
require "simplecov/tdd"
|
44
|
+
SimpleCov.formatter = SimpleCov::Formatter::Tdd
|
45
|
+
SimpleCov.start 'rails'
|
28
46
|
```
|
29
|
-
|
47
|
+
|
48
|
+
3. Run your tests using `rspec path/to/file_spec.rb` or `guard`
|
30
49
|
4. Fix the missing coverage
|
31
50
|
5. 💰 Profit! 💰
|
32
51
|
|
52
|
+
## Configuration options
|
53
|
+
|
54
|
+
There are a few configuration options that may be set before formatting is called.
|
55
|
+
Generally you may place these after `SimpleCov.formatter` or `SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new` in your setup.
|
56
|
+
|
57
|
+
### output_style (default: :simple)
|
58
|
+
When there are lines missing coverage, this option determines how to display output.
|
59
|
+
The accepted values are `:simple` (default) or `:verbose`.
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
SimpleCov::Formatter::Tdd.output_style = :verbose
|
63
|
+
```
|
64
|
+
|
65
|
+
Here's an example of what :verbose output looks like:
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
app/models/matched_90.rb
|
69
|
+
90.0% coverage, 167 total lines
|
70
|
+
|
71
|
+
The following 2 lines have missing coverage:
|
72
|
+
[5, 25]
|
73
|
+
|
74
|
+
line | source code
|
75
|
+
-------------------
|
76
|
+
5 => obj.is_a?(SomeClass)
|
77
|
+
25 => SomeClass.explode!
|
78
|
+
```
|
79
|
+
|
80
|
+
### debug_mode (default: false)
|
81
|
+
This is useful for determining if the current file being tested doesn't have
|
82
|
+
a match from SimpleCov's file list.
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
SimpleCov::Formatter::Tdd.debug_mode = true
|
86
|
+
```
|
87
|
+
|
88
|
+
## Future Features
|
89
|
+
|
90
|
+
* Support for minitest
|
91
|
+
|
33
92
|
## Development
|
34
93
|
|
35
94
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/example.gif
ADDED
Binary file
|
data/lib/simplecov/tdd.rb
CHANGED
@@ -3,51 +3,91 @@ require "simplecov/tdd/version"
|
|
3
3
|
|
4
4
|
module SimpleCov
|
5
5
|
module Formatter
|
6
|
+
|
7
|
+
# A SimpleCov formatter for generating single file results while using
|
8
|
+
# test driven development principles
|
6
9
|
class Tdd
|
7
10
|
attr_reader :result
|
8
11
|
|
9
|
-
|
12
|
+
# Hook into SimpleCov format by defining specific implementation
|
13
|
+
# of #format for the TDD formatter
|
14
|
+
def format(coverage_results)
|
10
15
|
@result = single_result(coverage_results)
|
11
16
|
|
17
|
+
# Is there a matching result?
|
12
18
|
if result.nil?
|
13
|
-
raise StandardError, "Could not find #{current_filename} as part of the SimpleCov::FileList results" if
|
14
|
-
return
|
19
|
+
raise StandardError, "Could not find #{current_filename} as part of the SimpleCov::FileList results" if debug_mode
|
20
|
+
return # Early return silently dies outside of debug mode
|
15
21
|
end
|
16
22
|
|
17
|
-
puts
|
18
|
-
coverage_overview_text
|
19
|
-
missed_line_numbers_message
|
23
|
+
puts format_filename_for_output
|
24
|
+
puts coverage_overview_text
|
25
|
+
puts missed_line_numbers_message
|
26
|
+
end
|
27
|
+
|
28
|
+
# Class level attr_writer
|
29
|
+
# @param style [Symbol] the symbol representation of the output_style
|
30
|
+
# accepted values are: [:simple, :verbose]
|
31
|
+
def self.output_style=(style)
|
32
|
+
@output_style = style
|
33
|
+
end
|
34
|
+
|
35
|
+
# Class level attr_reader
|
36
|
+
def self.output_style
|
37
|
+
@output_style
|
38
|
+
end
|
39
|
+
|
40
|
+
# Instance level method that defers to class_level variable when
|
41
|
+
# set via configuration. The default output_style is :simple
|
42
|
+
def output_style
|
43
|
+
self.class.output_style || :simple
|
44
|
+
end
|
45
|
+
|
46
|
+
# Class level attr_writer
|
47
|
+
# @param flag [Boolean] the current status (true/false) of debug mode
|
48
|
+
def self.debug_mode=(flag)
|
49
|
+
@debug_mode = flag
|
50
|
+
end
|
51
|
+
|
52
|
+
# Class level attr_reader
|
53
|
+
def self.debug_mode
|
54
|
+
@debug_mode
|
55
|
+
end
|
56
|
+
|
57
|
+
# Instance level method that defers to class_level variable when
|
58
|
+
# set via configuration. The default debug_mode is false
|
59
|
+
def debug_mode
|
60
|
+
self.class.debug_mode || false
|
20
61
|
end
|
21
62
|
|
22
63
|
private
|
23
64
|
|
24
|
-
#
|
25
|
-
#
|
65
|
+
# Match the current file against the SimpleCov::FileList results to determine
|
66
|
+
# a matching test
|
67
|
+
# @param coverage_results [SimpleCov::Result] the incoming results from running
|
68
|
+
# SimpleCov after tests
|
26
69
|
def single_result(coverage_results)
|
27
|
-
coverage_results.files.
|
70
|
+
coverage_results.files.detect { |file| file.filename == current_filename }
|
28
71
|
end
|
29
72
|
|
30
73
|
# Infer the current_filename based on incoming ARGV command line
|
31
74
|
# arguments and a matching spec type file
|
32
75
|
def current_filename
|
33
76
|
@_current_filename ||= begin
|
34
|
-
# @todo Can we hook into Guard watched file? That would be more accurate
|
35
77
|
# @TODO support for minitest
|
36
|
-
|
37
|
-
argument_index = nil
|
38
|
-
ARGV.each.with_index do |arg, index|
|
39
|
-
if arg.match(/_spec.rb/)
|
40
|
-
argument_index = index
|
41
|
-
break
|
42
|
-
end
|
43
|
-
end
|
78
|
+
argument_index = ARGV.find_index { |arg| arg.match(/_spec.rb/) }
|
44
79
|
|
45
80
|
if argument_index
|
46
|
-
Dir.pwd + "/" + ARGV[argument_index].sub("spec", "app").sub("_spec", "")
|
81
|
+
Dir.pwd + "/" + ARGV[argument_index].sub("spec/", "app/").sub("_spec.rb", ".rb")
|
47
82
|
end
|
48
83
|
end
|
49
84
|
end
|
50
85
|
|
86
|
+
# Format the currently matched filename to be more human readable
|
87
|
+
def format_filename_for_output
|
88
|
+
"app/" + current_filename.split("/app/")[1]
|
89
|
+
end
|
90
|
+
|
51
91
|
# @todo tty support for colors
|
52
92
|
def coverage_overview_text
|
53
93
|
covered_percent = result.covered_percent.round(2)
|
@@ -67,13 +107,28 @@ module SimpleCov
|
|
67
107
|
end
|
68
108
|
end
|
69
109
|
|
70
|
-
|
110
|
+
colorized_overview_text
|
71
111
|
end
|
72
112
|
|
113
|
+
# Display the missing line numbers in a summary message
|
73
114
|
def missed_line_numbers_message
|
74
115
|
return if result.covered_percent == 100
|
75
116
|
|
76
|
-
|
117
|
+
"\nThe following #{missed_line_numbers.size} lines have missing coverage: \n\e[31m#{missed_line_numbers}\e[0m".tap do |output|
|
118
|
+
output << missed_line_numbers_verbose_message
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# When output_style == :verbose, display a table that includes the
|
123
|
+
# line number missing converage as well as the related code
|
124
|
+
def missed_line_numbers_verbose_message
|
125
|
+
return "" if output_style != :verbose
|
126
|
+
|
127
|
+
"\nline | source code\n-------------------\n".tap do |output|
|
128
|
+
result.missed_lines.each do |missed_line|
|
129
|
+
output << missed_line.line_number.to_s + " => " + missed_line.src.strip + "\n"
|
130
|
+
end
|
131
|
+
end
|
77
132
|
end
|
78
133
|
|
79
134
|
def missed_line_numbers
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplecov-tdd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Frankel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -99,6 +99,7 @@ files:
|
|
99
99
|
- Rakefile
|
100
100
|
- bin/console
|
101
101
|
- bin/setup
|
102
|
+
- example.gif
|
102
103
|
- lib/simplecov/tdd.rb
|
103
104
|
- lib/simplecov/tdd/version.rb
|
104
105
|
- simplecov-tdd.gemspec
|
@@ -120,8 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
121
|
- !ruby/object:Gem::Version
|
121
122
|
version: '0'
|
122
123
|
requirements: []
|
123
|
-
|
124
|
-
rubygems_version: 2.6.13
|
124
|
+
rubygems_version: 3.0.3
|
125
125
|
signing_key:
|
126
126
|
specification_version: 4
|
127
127
|
summary: SimpleCov formatter for test driven development
|