6
6
*/
7
7
const sendCoverage = ( coverage , pathname = '/' ) => {
8
8
logMessage ( `Saving code coverage for **${ pathname } **` )
9
+
10
+ const appCoverageOnly = filterSpecsFromCoverage ( coverage )
9
11
// stringify coverage object for speed
10
- cy . task ( 'combineCoverage' , JSON . stringify ( coverage ) , {
12
+ cy . task ( 'combineCoverage' , JSON . stringify ( appCoverageOnly ) , {
11
13
log : false
12
14
} )
13
15
}
@@ -21,6 +23,30 @@ const logMessage = s => {
21
23
cy . log ( `${ s } \`[@cypress/code-coverage]\`` )
22
24
}
23
25
26
+ const filterSpecsFromCoverage = totalCoverage => {
27
+ // remove coverage for the spec files themselves,
28
+ // only keep "external" application source file coverage
29
+ const integrationFolder = Cypress . config ( 'integrationFolder' )
30
+ const supportFile = Cypress . config ( 'supportFile' )
31
+ const testFilePattern = Cypress . config ( 'testFiles' )
32
+ const isUsingDefaultTestPattern = testFilePattern === '**/*.*'
33
+
34
+ const isInIntegrationFolder = filename =>
35
+ filename . startsWith ( integrationFolder )
36
+ const isTestFile = filename => Cypress . minimatch ( filename , testFilePattern )
37
+ const isSupportFile = filename => filename === supportFile
38
+
39
+ const isA = ( fileCoverge , filename ) =>
40
+ isInIntegrationFolder ( filename ) || isSupportFile ( filename )
41
+ const isB = ( fileCoverge , filename ) =>
42
+ isTestFile ( filename ) || isSupportFile ( filename )
43
+
44
+ const isTestFileFilter = isUsingDefaultTestPattern ? isA : isB
45
+
46
+ const coverage = Cypress . _ . omitBy ( totalCoverage , isTestFileFilter )
47
+ return coverage
48
+ }
49
+
24
50
// to disable code coverage commands and save time
25
51
// pass environment variable coverage=false
26
52
// cypress run --env coverage=false
@@ -141,16 +167,7 @@ if (Cypress.env('coverage') === false) {
141
167
// the coverage information only once after all tests have finished
142
168
const unitTestCoverage = window . __coverage__
143
169
if ( unitTestCoverage ) {
144
- // remove coverage for the spec files themselves,
145
- // only keep "external" application source file coverage
146
- const supportFile = Cypress . config ( 'supportFile' )
147
- const testFilePattern = Cypress . config ( 'testFiles' )
148
-
149
- const isTestFile = ( fileCoverage , filename ) =>
150
- Cypress . minimatch ( filename , testFilePattern ) || filename === supportFile
151
-
152
- const coverage = Cypress . _ . omitBy ( window . __coverage__ , isTestFile )
153
- sendCoverage ( coverage , 'unit' )
170
+ sendCoverage ( unitTestCoverage , 'unit' )
154
171
}
155
172
} )
156
173
0 commit comments