alon rubin
alon rubin

Reputation: 71

Running istanbul for code-coverage in a Next.js app

I've built tests using Cypress to test the FE of a Next.js application. now I want to add code-coverage checks to see where and what I need to add and to keep track of my progress. Looking at the guides published by Cypress it seems that istanbuljs is the recommended way to go, but for some reason I can't get it to work.

I tried instrumenting the code via nyc to an /instrumented dir and running from there, tried adding it as part of the babel pipeline, but nothing works.

Currently I managed to arrive at 1 of 2 outcomes - Either the tests run fine, but no code-coverage data is collected, or the app will not work.

project package.json devDependencies:

"devDependencies": {
        "@babel/preset-react": "^7.18.6",
        "@cypress/code-coverage": "^3.10.0",
        "babel-plugin-istanbul": "^6.1.1",
        "babel-plugin-transform-class-properties": "^6.24.1",
        "cypress": "^10.1.0",
        "cypress-react-selector": "^2.3.20",
        "nyc": "^15.1.0"
    }

.babelrc: [if this file exsits, the app will not load - every page/component throws 'React is undefined' error in terminal]

{
    "presets": ["@babel/preset-react"],
    "plugins": ["transform-class-properties", "istanbul"]
}

support/e2e.js:

import './commands';
import '@cypress/code-coverage/support';

cypress.config.js:

const { defineConfig } = require('cypress');

module.exports = defineConfig({
    e2e: {
        baseUrl: 'http://localhost:3000',
        setupNodeEvents(on, config) {
            require('@cypress/code-coverage/task')(on, config);

            on('file:preprocessor', require('@cypress/code-coverage/use-babelrc'));

            return config;
        },
    },
    watchForFileChanges: false,
    defaultCommandTimeout: 1000000,
});

Upvotes: 6

Views: 1386

Answers (0)

Related Questions