¿Cómo puedo ignorar un patrón de archivo para la cobertura del código Jest?

2 minutos de lectura

Avatar de usuario de Bas van Dijk
Bas van Dijk

En mi proyecto Jest probado tengo *.entity.ts archivos No quiero que estos archivos se incluyan en mi prueba de cobertura.

Según la documentación en https://facebook.github.io/jest/docs/en/configuration.html#coveragepathignorepatterns-array-string hay un coveragePathIgnorePatterns ajuste que puede utilizar en el package.json

Probé patrones de archivos y expresiones regulares, pero ninguno de estos simplemente ignora el *.entity.ts archivos en el informe final.

Cuando agrego por ejemplo "coveragePathIgnorePatterns": ["common"] mis pruebas ni siquiera se ejecutarán más.

¿Alguna idea sobre cómo puedo hacer que Jest se salte el *.entity.ts en las pruebas de cobertura?

Mi sección Jest en el paquete.json se ve así:

{
    "moduleFileExtensions": [
        "js",
        "json",
        "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
        "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage"
}

Uso un archivo JSON externo para mantener mi configuración de Jest y ejecutarlo desde mi package.json usando npm: jest --config jest.config.json --no-cache

jest.config.json

{
    "collectCoverage": true,
    "collectCoverageFrom": [
        "src/**/*.ts"
    ],
    "coveragePathIgnorePatterns": [
        "node_modules",
        "test-config",
        "interfaces",
        "jestGlobalMocks.ts",
        ".module.ts",
        "<rootDir>/src/app/main.ts",
        ".mock.ts"
    ],
    "coverageDirectory": "<rootDir>/coverage/",
    "coverageThreshold": {
        "global": {
            "branches": 20,
            "functions": 30,
            "lines": 50,
            "statements": 50
        }
    },
    "mapCoverage": true,
    "preset": "jest-preset-angular",
    "setupTestFrameworkScriptFile": "<rootDir>/src/setupJest.ts",

    "transformIgnorePatterns": [
        "<rootDir>/node_modules/(?!@ionic-native|@ionic|@ngrx|angular2-ui-switch|angularfire2|jest-cli)"
    ],
    "verbose": false
}

Mi cobertura no incluye los archivos enumerados en “coveragePathIgnorePatterns”. Tal vez la línea fuente “/src/app/main.ts” sea la entrada que necesita.

  • Recordatorio simple: los patrones de ruta son expresiones regulares

    – Sebastián H.

    22 de julio de 2021 a las 8:56

  • coveragePathIgnorePatterns era la respuesta que estaba buscando. Votado a favor.

    – danivicario

    30 de junio de 2022 a las 15:51

Avatar de usuario de Gourab Paul
Pablo Gourab

Puedes agregar un ! marque en el parámetro collectCoverageFrom para excluirlo del conteo. Aquí cualquier archivo dentro de una subcarpeta de src dir

  collectCoverage: true,
  collectCoverageFrom: ['src/**/*.ts','!src/*/filesToExclude.ts']

  • Yo estoy confundido ahora. hace un ! (no) dentro de collectCoverageFrom significa lo mismo que mantener ese archivo regex dentro de la coberturaPathIgnorePatterns?

    – etotientz

    17 mayo 2022 a las 14:35

También puede agregar a su package.js la siguiente:

... // Other data
"jest": {
    "coveragePathIgnorePatterns" : [
      "<rootDir>/src/index.js",
      "<rootDir>/src/reportWebVitals.js"
    ]
}
... // Other data

Esa es la única configuración que necesita para que funcione

  • comienza a arrojar errores de babel al hacer esto

    – efkah

    8 de febrero a las 13:22

en mi caso lo siguiente rootDir El parámetro jest significaba que era el directorio ‘test’.

jest --rootDir=./test

¿Ha sido útil esta solución?