4

I am migrating NX Monorepo from version 13 to 14 and everything works fine except the Jest migration, I am getting this error I've tried to remove the jest cache, nx cache, deleted the whole node_modules, and do a fresh install but nothing is working. Appreciate if anyone has gone through this issue or has any idea what is happening. Thanks

When running the tests this is the error

 FAIL   lib-name  libs/lib/src/lib-name/select-options-picker/select-options-picker.component.spec.ts
  ● Test suite failed to run

    EBUSY: resource busy or locked, open 'C:\Users\User\AppData\Local\Temp\jest\ts-jest\c4\1501b067977ee4d35c48eb9ca4f97116c5dfef\e9a8ee471bc676fe755c57379268f21a1390a7a4'

      at NgJestTransformer.TsJestTransformer.getCacheKey (../../node_modules/jest-preset-angular/node_modules/ts-jest/dist/ts-jest-transformer.js:245:40)
      at ScriptTransformer._getCacheKey (../../node_modules/@jest/transform/build/ScriptTransformer.js:281:41)
      at ScriptTransformer._getFileCachePath (../../node_modules/@jest/transform/build/ScriptTransformer.js:352:27)
      at ScriptTransformer.transformSource (../../node_modules/@jest/transform/build/ScriptTransformer.js:595:32)
      at ScriptTransformer._transformAndBuildScript (../../node_modules/@jest/transform/build/ScriptTransformer.js:765:40)
      at ScriptTransformer.transform (../../node_modules/@jest/transform/build/ScriptTransformer.js:822:19)

This is my package.json

{
  "name": "rsa",
  "version": "0.0.1",
  "license": "MIT",
  "scripts": {
    "ng": "nx",
    "postinstall": "node ./decorate-angular-cli.js && ngcc --properties es2020 browser module main",
    "start": "ng serve --open",
    "test": "nx test",
    "test:coverage": "nx test --coverage --watch=false"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "14.1.3",
    "@angular/cdk": "14.1.3",
    "@angular/common": "14.1.3",
    "@angular/compiler": "14.1.3",
    "@angular/core": "14.1.3",
    "@angular/flex-layout": "^10.0.0-beta.32",
    "@angular/forms": "14.1.3",
    "@angular/material": "14.1.3",
    "@angular/material-moment-adapter": "14.1.3",
    "@angular/platform-browser": "14.1.3",
    "@angular/platform-browser-dynamic": "14.1.3",
    "@angular/router": "14.1.3",
    "@ngrx/effects": "14.0.2",
    "@ngrx/entity": "14.0.2",
    "@ngrx/router-store": "14.0.2",
    "@ngrx/store": "14.0.2",
    "@ngx-translate/core": "14.0.0",
    "@ngx-translate/http-loader": "7.0.0",
    "@nrwl/angular": "14.5.10",
    "@storybook/core-server": "6.5.10",
    "angular-2-local-storage": "^3.0.2",
    "apexcharts": "^3.35.0",
    "crypto-js": "3.3.0",
    "font-awesome": "^4.7.0",
    "hammerjs": "^2.0.8",
    "highlight.js": "^10.4.1",
    "jquery": "^3.5.1",
    "keycloak-angular": "^8.0.1",
    "keycloak-js": "^11.0.2",
    "lodash-es": "^4.17.21",
    "moment": "^2.29.3",
    "ng-apexcharts": "^1.5.6",
    "ng2-pdf-viewer": "^6.3.2",
    "ngx-cookie-service": "^10.1.1",
    "ngx-material-file-input": "^2.1.1",
    "ngx-permissions": "^8.1.1",
    "ngx-toastr": "^13.2.0",
    "perfect-scrollbar": "1.5.0",
    "postcss-loader": "^6.2.1",
    "postcss-nested": "^5.0.6",
    "postcss-nesting": "^8.0.1",
    "postcss-preset-env": "7.5.0",
    "postcss-scss": "^4.0.2",
    "primeicons": "^5.0.0",
    "primeng": "^11.4.5",
    "rxjs": "7.5.6",
    "simple-keyboard": "^2.29.67",
    "tslib": "^2.3.1",
    "zone.js": "0.11.4"
  },
  "devDependencies": {
    "@angular-builders/custom-webpack": "^13.1.0",
    "@angular-devkit/build-angular": "14.1.3",
    "@angular-devkit/core": "14.1.3",
    "@angular-eslint/eslint-plugin": "14.0.3",
    "@angular-eslint/eslint-plugin-template": "14.0.3",
    "@angular-eslint/template-parser": "14.0.3",
    "@angular/cli": "~14.1.0",
    "@angular/compiler-cli": "14.1.3",
    "@angular/language-service": "14.1.3",
    "@angularclass/hmr": "^3.0.0",
    "@commitlint/cli": "^11.0.0",
    "@ngrx/schematics": "14.0.2",
    "@ngrx/store-devtools": "14.0.2",
    "@nrwl/cli": "14.5.10",
    "@nrwl/cypress": "14.5.10",
    "@nrwl/eslint-plugin-nx": "14.5.10",
    "@nrwl/jest": "14.5.10",
    "@nrwl/linter": "14.5.10",
    "@nrwl/storybook": "14.5.10",
    "@nrwl/workspace": "14.5.10",
    "@storybook/addon-actions": "^6.3.0",
    "@storybook/addon-controls": "^6.4.1",
    "@storybook/addon-docs": "^6.4.22",
    "@storybook/addon-essentials": "6.5.10",
    "@storybook/addon-knobs": "^6.3.0",
    "@storybook/addon-postcss": "~2.0.0",
    "@storybook/angular": "6.5.10",
    "@storybook/builder-webpack5": "6.5.10",
    "@storybook/manager-webpack5": "6.5.10",
    "@types/angular-material": "^1.1.71",
    "@types/crypto-js": "3.1.47",
    "@types/highlight.js": "9.12.4",
    "@types/jasmine": "4.0.3",
    "@types/jasminewd2": "2.0.8",
    "@types/jest": "27.4.1",
    "@types/lodash-es": "4.17.3",
    "@types/node": "14.14.33",
    "@typescript-eslint/eslint-plugin": "5.29.0",
    "@typescript-eslint/parser": "5.29.0",
    "autoprefixer": "^10.4.0",
    "barrelsby": "^2.2.0",
    "codelyzer": "6.0.0-next.1",
    "comment-json": "^4.1.0",
    "commitizen": "^4.2.2",
    "commitlint-config-cz": "^0.13.2",
    "conventional-changelog-cli": "2.1.1",
    "cross-env": "^7.0.3",
    "cypress": "^9.5.4",
    "cz-customizable": "^6.3.0",
    "dotenv": "10.0.0",
    "eslint": "8.15.0",
    "eslint-config-prettier": "8.1.0",
    "eslint-plugin-cypress": "^2.10.3",
    "html-webpack-plugin": "^5.5.0",
    "husky": "^4.2.5",
    "jasmine-core": "4.2.0",
    "jasmine-marbles": "~0.8.3",
    "jasmine-spec-reporter": "7.0.0",
    "jest": "27.5.1",
    "jest-canvas-mock": "^2.2.0",
    "jest-preset-angular": "11.1.2",
    "lint-staged": "^10.2.11",
    "lodash": "^4.17.19",
    "ng-packagr": "14.1.0",
    "nx": "14.5.10",
    "postcss": "^8.4.4",
    "postcss-import": "14.1.0",
    "postcss-url": "10.1.3",
    "prettier": "2.6.2",
    "protractor": "7.0.0",
    "sass": "^1.44.0",
    "stylelint": "^13.9.0",
    "stylelint-config-standard": "^20.0.0",
    "stylelint-scss": "^3.18.0",
    "tailwindcss": "^2.2.16",
    "ts-jest": "27.1.4",
    "ts-node": "10.9.1",
    "typescript": "4.7.4",
    "webpack": "^5.50.0",
    "webpack-bundle-analyzer": "^4.4.0"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged --concurrent false",
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "lint-staged": {
    "docs/**/*.md": [
      "node docs/check-kb-labels",
      "node docs/check-dead-links fast",
      "node docs/check-documentation-overview",
      "node docs/check-sentence-newline"
    ],
    "*.{scss,css}": [
      "stylelint --fix"
    ],
    "*": [
      "prettier --loglevel warn --write"
    ],
    "*.ts": [
      "jest --ci --bail --findRelatedTests --detectOpenHandles"
    ]
  },
  "commitlint": {
    "extends": [
      "cz"
    ]
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-customizable"
    }
  },
  "postinstall": {
    "jest-extended/types": "copy node_modules/@types/jest-extended"
  }
}

Jest.preset.js

const nxPreset = require('@nrwl/jest/preset').default;
module.exports = {
  ...nxPreset,
  testMatch: ['**/+(*.)+(spec|test).+(ts|js)?(x)'],
  transform: {
    '^.+\\.(ts|js|html)$': 'ts-jest',
  },
  // resolver: '@nrwl/jest/plugins/resolver',
  testRunner: 'jest-jasmine2',
  moduleFileExtensions: ['ts', 'js', 'html'],
  coverageReporters: ['html'],
  moduleNameMapper: {
    '^lodash-es$': 'lodash',
  },
};

Jest.config.ts

/* eslint-disable */
export default {
  displayName: 'donor-ui',
  preset: '../../jest.preset.js',
  setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
  globals: {
    'ts-jest': {
      tsconfig: '<rootDir>/tsconfig.spec.json',
      stringifyContentPathRegex: '\\.(html|svg)$',
    },
  },
  coverageDirectory: '../../coverage/apps/donor-ui',
  transform: {
    '^.+\\.(ts|mjs|js|html)$': 'jest-preset-angular',
  },
  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],
  snapshotSerializers: [
    'jest-preset-angular/build/serializers/no-ng-attributes',
    'jest-preset-angular/build/serializers/ng-snapshot',
    'jest-preset-angular/build/serializers/html-comment',
  ],
};

1 Answers1

0

I think there is some issue with the Nx and Jest cache synchronization. I faced a similar issue after migration from Nx-15 to Nx-16.

However, after a bit of research, found out that, executing the nx command with --no-cache works fine.

So executing:

nx-test --no-cache works perfectly fine.