Skip to content

Commit fb90299

Browse files
authored
add coverage check after same-folder example (#176)
* add coverage check after same-folder example * move folder
2 parents 7b2e452 + 1937e22 commit fb90299

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed

.circleci/config.yml

+26
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ workflows:
122122
- run:
123123
command: npx nyc report --check-coverage true --lines 100
124124
working_directory: examples/before-each-visit
125+
- run:
126+
name: Check code coverage 📈
127+
command: |
128+
node ../../scripts/check-coverage main.js
129+
node ../../scripts/only-covered main.js
130+
working_directory: examples/before-each-visit
125131

126132
- cypress/run:
127133
attach-workspace: true
@@ -145,6 +151,12 @@ workflows:
145151
- run:
146152
command: npx nyc report --check-coverage true --lines 100
147153
working_directory: examples/before-all-visit
154+
- run:
155+
name: Check code coverage 📈
156+
command: |
157+
node ../../scripts/check-coverage main.js
158+
node ../../scripts/only-covered main.js
159+
working_directory: examples/before-all-visit
148160

149161
- cypress/run:
150162
attach-workspace: true
@@ -168,6 +180,13 @@ workflows:
168180
command: npm run coverage:check
169181
working_directory: examples/ts-example
170182

183+
- run:
184+
name: Check code coverage 📈
185+
command: |
186+
node ../../scripts/check-coverage main.ts
187+
node ../../scripts/only-covered main.ts
188+
working_directory: examples/ts-example
189+
171190
- cypress/run:
172191
attach-workspace: true
173192
name: example-same-folder
@@ -194,6 +213,13 @@ workflows:
194213
- run:
195214
command: npx nyc report --check-coverage true --lines 100 --include unit-utils.js
196215
working_directory: examples/same-folder
216+
- run:
217+
name: Check code coverage 📈
218+
command: |
219+
node ../../scripts/check-coverage main.js
220+
node ../../scripts/check-coverage unit-utils.js
221+
node ../../scripts/only-covered main.js unit-utils.js
222+
working_directory: examples/same-folder
197223

198224
- publish:
199225
filters:

scripts/check-coverage.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const { join } = require('path')
2+
3+
const filename = process.argv[2]
4+
if (!filename) {
5+
console.error('Usage: node %s <file name>', __filename)
6+
process.exit(1)
7+
}
8+
const coverageFilename = join(process.cwd(), '.nyc_output', 'out.json')
9+
const coverage = require(coverageFilename)
10+
const fileCoverageKey = Object.keys(coverage).find(name => {
11+
const fileCover = coverage[name]
12+
if (fileCover.path.endsWith(filename)) {
13+
return fileCover
14+
}
15+
})
16+
17+
if (!fileCoverageKey) {
18+
console.error(
19+
'Could not find file %s in coverage in file %s',
20+
filename,
21+
coverageFilename
22+
)
23+
process.exit(1)
24+
}
25+
26+
const fileCoverage = coverage[fileCoverageKey]
27+
const statementCounters = fileCoverage.s
28+
const isThereUncoveredStatement = Object.keys(statementCounters).some(
29+
(k, key) => {
30+
return statementCounters[key] === 0
31+
}
32+
)
33+
if (isThereUncoveredStatement) {
34+
console.error(
35+
'file %s has statements that were not covered by tests',
36+
fileCoverage.path
37+
)
38+
console.log('statement counters %o', statementCounters)
39+
40+
process.exit(1)
41+
}
42+
43+
console.log(
44+
'✅ All statements in file %s (found for %s) were covered',
45+
fileCoverage.path,
46+
filename
47+
)

scripts/only-covered.js

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const { join } = require('path')
2+
const _ = require('lodash')
3+
4+
const filenames = process.argv.slice(2)
5+
if (!filenames.length) {
6+
console.error('Usage: node %s <file name 1> <file name 2>', __filename)
7+
process.exit(1)
8+
}
9+
10+
const shouldBeCovered = filepath =>
11+
filenames.some(name => filepath.endsWith(name))
12+
13+
const coverageFilename = join(process.cwd(), '.nyc_output', 'out.json')
14+
const coverage = require(coverageFilename)
15+
16+
const coveredFilepaths = Object.keys(coverage).map(name => coverage[name].path)
17+
18+
// console.log(coveredFilepaths)
19+
20+
const [covered, extraCoveredFiles] = _.partition(
21+
coveredFilepaths,
22+
shouldBeCovered
23+
)
24+
25+
if (extraCoveredFiles.length) {
26+
console.error('Error: found extra covered files 🔥')
27+
console.error('Expected the following files in coverage results')
28+
console.error(filenames.join('\n'))
29+
console.error('extra files covered 🔥')
30+
console.error(extraCoveredFiles.join('\n'))
31+
process.exit(1)
32+
}
33+
34+
if (covered.length < filenames.length) {
35+
console.error('Error: expected all files from the list to be covered 🔥')
36+
console.error('Expected the following files in coverage results')
37+
console.error(filenames.join('\n'))
38+
console.error('But found only these files to be covered')
39+
console.error(covered.join('\n'))
40+
41+
console.error('Files missing from the coverage 🔥')
42+
const missingFiles = filenames.filter(
43+
filename =>
44+
!covered.some(coveredFilename => coveredFilename.endsWith(filename))
45+
)
46+
console.error(missingFiles.join('\n'))
47+
48+
process.exit(1)
49+
}
50+
51+
console.log('✅ All and only expected files were covered')

0 commit comments

Comments
 (0)