From 5fe76d05705be0307151f7e6917995d6af969774 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Mon, 22 Jul 2019 22:35:26 -0400 Subject: [PATCH 1/3] chore: document custom output folder, close #50 --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 7dcf84993..8aca46993 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,18 @@ if (global.__coverage__) { That should be enough - the code coverage from the server will be requested at the end of the test run and merged with the client-side code coverage, producing a combined report +## Custom report folder + +You can specify custom report folder by adding `nyc` object to the `package.json` file. For example to save reports to `cypress-coverage` folder, use: + +```json +{ + "nyc": { + "report-dir": "cypress-coverage" + } +} +``` + ## Exclude code You can exclude parts of the code or entire files from the code coverage report. See [Istanbul guide](https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md). Common cases: From 02489d2555651dc077e04026473f35798900bacd Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Mon, 22 Jul 2019 22:55:21 -0400 Subject: [PATCH 2/3] feat: configure reporters, default includes json, close #49 --- .gitignore | 1 + README.md | 18 ++++++++++++ package-lock.json | 72 ++++++++++++++++++++++++++++++++++++----------- package.json | 1 + task.js | 31 +++++++++++++++++--- 5 files changed, 103 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index af4049f46..8bd04cdad 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ coverage/ dist/ .cache/ .vscode/ +cypress-coverage/ diff --git a/README.md b/README.md index 8aca46993..1c11cf26e 100644 --- a/README.md +++ b/README.md @@ -144,6 +144,24 @@ You can specify custom report folder by adding `nyc` object to the `package.json } ``` +## Custom reporters + +You can specify custom coverage reporter(s) to use. For example to output text summary and save JSON report in `cypress-coverage` folder set in your `package.json` folder: + +```json +{ + "nyc": { + "report-dir": "cypress-coverage", + "reporter": [ + "text", + "json" + ] + } +} +``` + +**Tip:** find list of reporters [here](https://istanbul.js.org/docs/advanced/alternative-reporters/) + ## Exclude code You can exclude parts of the code or entire files from the code coverage report. See [Istanbul guide](https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md). Common cases: diff --git a/package-lock.json b/package-lock.json index 0a33797cb..5c974d5d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3259,23 +3259,28 @@ } }, "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "requires": { "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", + "make-dir": "^3.0.0", "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" + "p-event": "^4.1.0" }, "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", + "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" } } }, @@ -7282,8 +7287,7 @@ "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "nice-try": { "version": "1.0.5", @@ -10897,6 +10901,27 @@ "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" + }, + "dependencies": { + "cp-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", + "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^2.0.0", + "nested-error-stacks": "^2.0.0", + "pify": "^4.0.1", + "safe-buffer": "^5.0.1" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + } } }, "oauth-sign": { @@ -11187,6 +11212,14 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, + "p-event": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.1.0.tgz", + "integrity": "sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA==", + "requires": { + "p-timeout": "^2.0.1" + } + }, "p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", @@ -11207,8 +11240,7 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { "version": "2.1.0", @@ -11256,6 +11288,14 @@ "retry": "^0.12.0" } }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", diff --git a/package.json b/package.json index 3f4f9a721..382ea692f 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "private": false, "dependencies": { "@cypress/browserify-preprocessor": "2.1.1", + "cp-file": "7.0.0", "debug": "4.1.1" }, "devDependencies": { diff --git a/task.js b/task.js index b6b79d851..be1aa3ba7 100644 --- a/task.js +++ b/task.js @@ -2,14 +2,26 @@ const istanbul = require('istanbul-lib-coverage') const { join } = require('path') const { existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs') const execa = require('execa') -const debug = require('debug')('code-coverage') +const fs = require('fs') const { fixSourcePathes } = require('./utils') +const debug = require('debug')('code-coverage') + // these are standard folder and file names used by NYC tools const outputFolder = '.nyc_output' const coverageFolder = join(process.cwd(), outputFolder) const nycFilename = join(coverageFolder, 'out.json') +// there might be custom "nyc" options in the user package.json +// see https://github.com/istanbuljs/nyc#configuring-nyc +// potentially there might be "nyc" options in other configuration files +// it allows, but for now ignore those options +const pkgFilename = join(process.cwd(), 'package.json') +const pkg = fs.existsSync(pkgFilename) + ? JSON.parse(fs.readFileSync(pkgFilename, 'utf8')) + : {} +const nycOptions = pkg.nyc || {} + function saveCoverage (coverage) { if (!existsSync(coverageFolder)) { mkdirSync(coverageFolder) @@ -72,10 +84,21 @@ module.exports = { console.warn('Skipping coverage report') return null } - const command = 'nyc' - const args = ['report', '--reporter=lcov'] - debug('saving coverage report using command: %s %s', command, args) + + const reportDir = nycOptions['report-dir'] || './coverage' + const reporter = nycOptions['reporter'] || ['lcov', 'clover', 'json'] + const reporters = Array.isArray(reporter) + ? reporter.map(name => `--reporter=${name}`) + : `--reporter=${reporter}` + // should we generate report via NYC module API? + const command = 'nyc' + const args = ['report', '--report-dir', reportDir].concat(reporters) + debug( + 'saving coverage report using command: "%s %s"', + command, + args.join(' ') + ) return execa(command, args, { stdio: 'inherit' }) } } From 798b010c4966bbcd58dec59b92ccca16faadfae1 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Mon, 22 Jul 2019 22:57:08 -0400 Subject: [PATCH 3/3] fix: remove cp-file --- package-lock.json | 48 ++++------------------------------------------- package.json | 1 - 2 files changed, 4 insertions(+), 45 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c974d5d8..923d736e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3258,32 +3258,6 @@ "parse-json": "^4.0.0" } }, - "cp-file": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", - "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" - } - } - }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -7287,7 +7261,8 @@ "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "dev": true }, "nice-try": { "version": "1.0.5", @@ -11212,14 +11187,6 @@ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, - "p-event": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.1.0.tgz", - "integrity": "sha512-4vAd06GCsgflX4wHN1JqrMzBh/8QZ4j+rzp0cd2scXRwuBEv+QR3wrVA5aLhWDLw4y2WgDKvzWF3CCLmVM1UgA==", - "requires": { - "p-timeout": "^2.0.1" - } - }, "p-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", @@ -11240,7 +11207,8 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "2.1.0", @@ -11288,14 +11256,6 @@ "retry": "^0.12.0" } }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "requires": { - "p-finally": "^1.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", diff --git a/package.json b/package.json index 382ea692f..3f4f9a721 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "private": false, "dependencies": { "@cypress/browserify-preprocessor": "2.1.1", - "cp-file": "7.0.0", "debug": "4.1.1" }, "devDependencies": {