full coverage

This commit is contained in:
Rene Haas
2022-07-30 22:00:07 +02:00
parent 95678c8d75
commit f3556ad91b
13 changed files with 7491 additions and 1928 deletions
+3 -1
View File
@@ -4,8 +4,10 @@
"exports": {
"./resolve": "./src/resolve.json",
"./playwright": "./src/playwright.js",
"./playwright.coverage": "./src/playwright.coverage.js",
"./jest": "./src/jest.js",
"./babel": "./src/babel.js"
"./babel": "./src/babel.js",
"./full-coverage": "./src/full-coverage.js"
},
"version": "0.0.0"
}
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
tmpCoverageDirectory: './.coverage/.nycFull',
coverageDirectory: './.coverage/full',
};
+4
View File
@@ -0,0 +1,4 @@
module.exports = {
tmpCoverageDirectory: './.coverage/.nycPlaywright',
coverageDirectory: './.coverage/playwright',
};
@@ -0,0 +1,51 @@
#!/usr/bin/env node
const fs = require('fs');
const { execSync } = require('child_process');
const { join, dirname, basename } = require('path');
const { coverageDirectory, tmpCoverageDirectory } = require('@local/config/full-coverage');
const { coverageDirectory: playwrightCoverage } = require('@local/config/playwright.coverage');
const { coverageDirectory: jestCoverage } = require('@local/config/jest');
const reportFileName = 'coverage-final.json';
const copyReportFile = (path) => {
if (fs.existsSync(path)) {
if (!fs.existsSync(tmpCoverageDirectory)) {
fs.mkdirSync(tmpCoverageDirectory);
}
fs.copyFileSync(
path,
join(tmpCoverageDirectory, `${basename(dirname(path))}_${Date.now()}.json`)
);
}
};
const generateFullCoverage = async () => {
copyReportFile(join(playwrightCoverage, reportFileName));
copyReportFile(join(jestCoverage, reportFileName));
const mergeDestination = join(tmpCoverageDirectory, `full_${Date.now()}.json`);
execSync(`nyc merge ${tmpCoverageDirectory} ${mergeDestination}`);
const files = fs.readdirSync(tmpCoverageDirectory);
files.forEach((file) => {
const filePath = join(tmpCoverageDirectory, file);
if (filePath !== mergeDestination) {
fs.rmSync(filePath);
}
});
execSync(
`nyc report --reporter=lcov --reporter=clover --reporter=json --report-dir=${coverageDirectory} --temp-dir=${tmpCoverageDirectory}`
/* { stdio: 'inherit' } */
);
fs.rmSync(tmpCoverageDirectory, { recursive: true });
};
(async () => {
try {
await generateFullCoverage();
} catch (e) {
console.error(`Full coverage couldn't be generated.`, e);
}
})();
+8
View File
@@ -0,0 +1,8 @@
{
"private": true,
"name": "@local/full-coverage",
"bin": {
"full-coverage": "./bin/generateFullCoverage.js"
},
"version": "0.0.0"
}
@@ -0,0 +1,33 @@
#!/usr/bin/env node
const fs = require('fs');
const { execSync } = require('child_process');
const { join } = require('path');
const { coverageDirectory, tmpCoverageDirectory } = require('@local/config/playwright.coverage');
const mergeCoverage = async () => {
if (fs.existsSync(tmpCoverageDirectory)) {
const mergeDestination = join(tmpCoverageDirectory, `merged_${Date.now()}.json`);
execSync(`nyc merge ${tmpCoverageDirectory} ${mergeDestination}`);
const files = fs.readdirSync(tmpCoverageDirectory);
files.forEach((file) => {
const filePath = join(tmpCoverageDirectory, file);
if (filePath !== mergeDestination) {
fs.rmSync(filePath);
}
});
execSync(
`nyc report --reporter=lcov --reporter=text --reporter=clover --reporter=json --report-dir=${coverageDirectory} --temp-dir=${tmpCoverageDirectory}`,
{ stdio: 'inherit' }
);
fs.rmSync(tmpCoverageDirectory, { recursive: true });
}
};
(async () => {
try {
await mergeCoverage();
} catch (e) {
console.error(`Playwright coverage couldn't be merged.`, e);
}
})();
+3
View File
@@ -2,6 +2,9 @@
"private": true,
"name": "@local/playwright-tooling",
"main": "./src/index.js",
"bin": {
"playwright-merge-coverage": "./bin/mergeCoverage.js"
},
"types": "index.d.ts",
"version": "0.0.0"
}
@@ -0,0 +1,22 @@
const fs = require('fs');
const { basename, dirname, join } = require('path');
const v8toIstanbul = require('v8-to-istanbul');
const { tmpCoverageDirectory } = require('@local/config/playwright.coverage');
module.exports = async (coverageOutputDir, sourceDir, coverage, testfile) => {
// eslint-disable-next-line no-restricted-syntax
for (const entry of coverage) {
process.chdir(sourceDir);
const converter = v8toIstanbul('', 0, { source: entry.source });
// eslint-disable-next-line no-await-in-loop
await converter.load();
converter.applyCoverage(entry.functions);
const coveragePath = join(
coverageOutputDir,
`${tmpCoverageDirectory}/${basename(dirname(testfile))}_${Date.now()}.json`
);
fs.mkdirSync(dirname(coveragePath), { recursive: true });
fs.writeFileSync(coveragePath, JSON.stringify(converter.toIstanbul()));
}
};
-43
View File
@@ -1,43 +0,0 @@
const fs = require('fs');
const { execSync } = require("child_process");
const { basename, dirname, join } = require('path');
const v8toIstanbul = require('v8-to-istanbul');
const tmpCoveragePath = './.coverage/.nycPlaywright';
const reportDir = './.coverage/playwright';
module.exports = {
collectCoverage: async (coverageOutputDir, sourceDir, coverage, testfile) => {
// eslint-disable-next-line no-restricted-syntax
for (const entry of coverage) {
process.chdir(sourceDir);
const converter = v8toIstanbul('', 0, { source: entry.source });
// eslint-disable-next-line no-await-in-loop
await converter.load();
converter.applyCoverage(entry.functions);
const coveragePath = join(
coverageOutputDir,
`${tmpCoveragePath}/${basename(dirname(testfile))}_${Date.now()}.json`
);
fs.mkdirSync(dirname(coveragePath), { recursive: true });
fs.writeFileSync(coveragePath, JSON.stringify(converter.toIstanbul()));
}
},
mergeCoverage: async () => {
if(fs.existsSync(tmpCoveragePath)) {
const mergeDestination = join(tmpCoveragePath, `merged_${Date.now()}.json`)
execSync(`nyc merge ${tmpCoveragePath} ${mergeDestination}`);
const files = fs.readdirSync(tmpCoveragePath);
files.forEach((file) => {
const filePath = join(tmpCoveragePath, file);
if (filePath !== mergeDestination) {
fs.rmSync(filePath);
}
});
execSync(`nyc report --reporter=lcov --reporter=text --reporter=clover --reporter=json --report-dir=${reportDir} --temp-dir=${tmpCoveragePath}`, {stdio:'inherit' });
fs.rmSync(tmpCoveragePath, { recursive: true });
}
}
}
@@ -2,7 +2,7 @@ const { dirname } = require('path');
const { rollup, watch: rollupWatch } = require('rollup');
const { test } = require('@playwright/test');
const createPlaywrightRollupConfig = require('@local/rollup/playwright');
const { collectCoverage } = require('./coverage');
const collectCoverage = require('./collectCoverage');
const createRollupBundle = async (testDir, watch = false) => {
let server;
@@ -79,4 +79,4 @@ module.exports = () => {
test.afterAll(() => {
close();
});
};
};
+7355 -1868
View File
File diff suppressed because it is too large Load Diff
+4 -8
View File
@@ -41,8 +41,8 @@
"eslint-plugin-react": "^7.30.0",
"eslint-plugin-react-hooks": "^4.6.0",
"glob": "^7.1.6",
"jest": "^28.1.1",
"jest-environment-jsdom": "^28.1.1",
"jest": "^28.1.3",
"jest-environment-jsdom": "^28.1.3",
"node-sass": "^7.0.1",
"nyc": "^15.1.0",
"playwright": "^1.22.2",
@@ -70,19 +70,15 @@
"@local/tsconfig": "file:./local/tsconfig",
"@local/config": "file:./local/config",
"@local/rollup": "file:./local/rollup",
"@local/full-coverage": "file:./local/full-coverage",
"@local/playwright-tooling": "file:./local/playwright-tooling",
"@local/browser-testing": "file:./local/browser-testing"
},
"scripts": {
"test": "yarn workspaces run test",
"test:jsdom": "yarn workspaces run test:jsdom",
"test:browser": "yarn workspaces run test:browser",
"test:browser:quick": "yarn workspaces run test:browser:quick",
"test:browser-dev": "yarn workspaces run test:browser-dev",
"test:playwright": "yarn workspaces run test:playwright",
"build": "yarn workspaces run build",
"lint": "npx eslint --fix .",
"aa": "echo hi",
"root:some": "workspace-root aa"
"lint": "npx eslint --fix ."
}
}
+2 -6
View File
@@ -9,14 +9,10 @@
],
"types": "types/index.d.ts",
"scripts": {
"test": "jest --coverage --runInBand --detectOpenHandles",
"test:jsdom": "jest --coverage --runInBand --detectOpenHandles --testPathPattern",
"test:browser": "jest --runInBand --detectOpenHandles --selectProjects browser --testPathPattern",
"test:browser:quick": "jest --runInBand --detectOpenHandles --selectProjects browser --testPathIgnorePatterns=\"/node_modules/|/structureLifecycle/\"",
"test:browser-dev": "jest --runInBand --detectOpenHandles --selectProjects browser-dev --testPathPattern",
"posttest:jsdom": "full-coverage",
"build": "rollup -c",
"test:playwright": "playwright test",
"posttest:playwright": "node playwright.coverage.js",
"root:tt": "node workspace.root.js root:some"
"posttest:playwright": "playwright-merge-coverage && full-coverage"
}
}