1
resposta

A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks.

Olá, estou escrevendo testes em JEST para a minha aplicação Angular e estou enfrentando o erro descrito. Segue minhas configurações:

`"jest": {
    "preset": "jest-preset-angular",
    "setupFilesAfterEnv": [
        "<rootDir>/src/setup.jest.ts"
    ],
    "testPathIgnorePatterns": [
        "<rootDir>/node_modules/",
        "<rootDir>/dist/"
    ],
    "collectCoverage": true,
    "collectCoverageFrom": [
        "./src/**"
    ],
    "coveragePathIgnorePatterns": [
        "node_modules",
        "test-config",
        "interfaces",
        "jestGlobalMocks.ts",
        ".module.ts",
        "<rootDir>/src/app/main.ts",
        ".mock.ts",
        "src/environments",
        "src/index.html",
        "src/main.ts",
        "src/polyfills.ts"
    ],
    "coverageThreshold": {
        "global": {
            "lines": 70,
            "statements": 70
        },
        "globals": {
            "ts-jest": {
                "tsConfig": "<rootDir>/tsconfig.sepc.json",
                "stringifyContentPathRegex": "\\.html$"
            }
        }
    }
}`

`"test": {
      "builder": "@angular-builders/jest:run",
      "options": {
        "coverage": true,
        "codeCoverageExclude": [
          "e2e/**",
          "mock/**",
          "**/*config.js",
          "**/*conf.js",
          "**/environments/*.ts",
          "**/*.spec.ts",
          "**/main.ts",
          "**/polyfills.ts",
          " **/index.html",
          "**/*app.module.ts",
          "**/*.spec.ts, **/*.ts",
          "src/test/*"
        ],
        "no-cache": [
          "true"
        ],
        "tsConfig": "tsconfig.spec.json",
        "testMatch": [
          "**/__test__/**/*.[jt]s?(x)",
          "**/?(*.)+(spec|test).[jt]s?(x)"
        ],
        "polyfills": [
          "src/polyfills.ts"
        ],
        "assets": [
          "src/favicon.ico",
          "src/assets"
        ],
        "styles": [
          "src/styles.css"
        ],
        "scripts": []
      }
    },
    "lint": {
      "builder": "@angular-devkit/build-angular:tslint",
      "options": {
        "tsConfig": [
          "tsconfig.app.json",
          "tsconfig.spec.json",
          "e2e/tsconfig.json"
        ],
        "exclude": [
          "**/node_modules/**"
        ]
      }
    }`
1 resposta

Oi, dev! Tudo bem?

A mensagem de erro enviada geralmente quando há vazamentos de recursos, como promessas não resolvidas ou conexões de banco de dados não fechadas, nos nossos testes.

Como descrito na própria mensagem de erro, uma possível solução é adicionar a opção "--detectOpenHandles" ao executar os testes, o que nos fará identificar quais recursos estão vazando, ou seja, que não foram fechados corretamente, possibilitando corrigi-los adequadamente.

Além disso, devemos corrigir os vazamentos de recursos, o que podemos fazer das seguintes maneiras:

  1. Conferir se estamos fechando todas as conexões de banco de dados após o teste. Podemos usar blocos afterAll ou afterEach para garantir que todas as operações de limpeza sejam executadas.
  2. Garantir que todas as promessas sejam resolvidas ou rejeitadas no final dos testes. Podemos usar await ou retornar a promessa para garantir que ela seja tratada adequadamente.
  3. Verificar se não há funções de teste assíncronas que não estão sendo tratadas corretamente.

Por fim, devemos verificar se estamos utilizando as versões mais recentes do JEST e do Jest-Preset-Angular, pois atualizações podem corrigir problemas conhecidos.

É importante reforçar a importância de garantir que todos os recursos sejam fechados e todas as promessas sejam tratadas adequadamente para evitar vazamentos de recursos e erros como esse no Jest.

Espero ter ajudado! Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓