This repo shows a minimal working example of generating Code Coverage for an Angular app withing a NX Monorepo.
Install packages
npm i @cypress/code-coverage -D
npm i @jsdevtools/coverage-istanbul-loader -D
Adjust project.json of the tested app and create extenstion of webpack.
In project.json change the executor of build target to webpack-browser
"executor": "@nx/angular:webpack-browser",
And the executor of serve target to webpack-dev-server
"executor": "@nx/angular:webpack-dev-server",
Add customWebpack to build target
"customWebpackConfig": {
"path": "apps/myapp/webpack.config.js"
}
Create webpack.config.js in the app directory
module.exports = (webpackConfig) => {
return {
...webpackConfig,
module: {
rules: [
// Istanbul Instrumentation rule
...webpackConfig.module.rules,
{
test: /\.(js|ts)$/,
loader: '@jsdevtools/coverage-istanbul-loader',
options: { esModules: true },
enforce: 'post',
include: [require('path').join(__dirname, '/src')],
exclude: [/\.(e2e|spec|cy)\.ts$/, /node_modules/, /(ngfactory|ngstyle)\.js/],
},
],
},
}
}
Add cypress/coverage task to cypress.config.ts
import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset';
export default defineConfig({
e2e: nxE2EPreset(__dirname),
e2e: {
...nxE2EPreset(__dirname),
setupNodeEvents: (on, config) => {
require('@cypress/code-coverage/task')(on, config)
return config;
},
},
});
Import cypress/coverage in support/e2e.ts
import '@cypress/code-coverage/support'
nx e2e myapp-e2e
After running tests the coverage output will be generated under apps/myapp-e2e/coverage