Skip to content

jest + ts-jest: after 26.6.0/26.4.1, combination throws error "Cannot read property 'cwd' of undefined #2085

@fluffynuts

Description

@fluffynuts

🐛 Bug Report

We've set our package versions for jest and ts-jest to x, so we always have the latest. We don't use a package-lock, and our CI always builds from scratch. Recently, builds were failing at the test phase with:

  ● Test suite failed to run
    TypeError: Cannot read property 'cwd' of undefined
      at new ConfigSet (node_modules/ts-jest/dist/config/config-set.js:144:59)
      at TsJestTransformer.createOrResolveTransformerCfg (node_modules/ts-jest/dist/ts-jest-transformer.js:95:38)
      at TsJestTransformer.getCacheKey (node_modules/ts-jest/dist/ts-jest-transformer.js:72:14)

using a tool I just wrote (time-walker, available on npmjs.com), I "traveled back in time" to find when things officially broke, which was 4 days ago, with versions:

jest: 26.6.1
ts-jest: 26.4.2

going back a day, things work fine with versions:
jest: 26.6.0
ts-jest: 26.4.1

For now, I'm going to pin at these versions, but I'd like to keep on the bleeding edge as soon as the issue can be properly resolved.

To Reproduce

  • Install latest jest & ts-jest
  • tests fail to run (this is in a Vue test environment, but I'd expect that Vue isn't the problem. I don't know if babel or anything else is involved, so I'm including our package.json (package is a private project, never mind about the name):
{
    "name": "client",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "parallel-lint-transpile": "run-p lint transpile",
        "test": "cross-env JEST_USE_CACHE=1 run-s parallel-lint-transpile clear-test-cache test:unit",
        "posttest": "run-s check-for-async-failures",
        "clear-async-test-failures": "rimraf async-errors",
        "check-for-async-failures": "ts-node tests/fail-on-async-errors.ts",
        "clear-test-cache": "run-p ask-vue-to-clear-test-cache destroy-jest-local-cache",
        "ask-vue-to-clear-test-cache": "vue-cli-service test:unit --clearCache",
        "destroy-jest-local-cache": "rimraf .jest-cache",
        "preautotest": "run-s clear-test-cache",
        "autotest": "vue-cli-service test:unit --watch --no-cache",
        "autotest-all": "vue-cli-service test:unit --watchAll --no-cache",
        "autolint": "nodemon -e ts -x \"run-s lint\"",
        "prestart": "cd .. && npm install && cd src",
        "start": "ts-node tools/serve.ts",
        "start-local": "cross-env LOCAL_YUMBI=1 ts-node tools/serve.ts",
        "preinstall-changed": "rimraf package-lock.json",
        "install-changed": "install-changed",
        "preserve": "run-s install-changed",
        "serve": "ts-node tools/serve.ts",
        "serve-prod": "vue-cli-service serve --mode production",
        "prebuild": "run-s install-changed nuke-dist",
        "nuke-dist": "rimraf dist",
        "build": "cross-env NODE_ENV=production ts-node tools/build.ts",
        "postbuild": "ts-node tools/dumbify.ts dist/**/js/chunk-vendors-legacy*.js dist/**/js/app-legacy*.js",
        "build-for-iis": "cross-env CREATE_WEB_CONFIG=1 LOCAL_YUMBI=1 run-s build --",
        "build-local": "cross-env LOCAL_YUMBI=1 run-s build --",
        "autotranspile": "nodemon -e ts -x \"tsc --noEmit\"",
        "lint": "vue-cli-service lint --no-fix",
        "lint:fix": "vue-cli-service lint --fix",
        "clear-build-reports": "rimraf buildreports",
        "pretest:unit": "run-p clear-test-cache clear-build-reports clear-async-test-failures",
        "test:unit": "ts-node tools/test.ts",
        "pretranspile": "run-s install-changed",
        "transpile": "tsc --noEmit",
        "purge-dist": "rimraf dist",
        "serve-dist": "cd dist && serve",
        "watch-dist": "nodemon -e ts,vue,scss -x \"run-p rebuild-and-serve\"",
        "notify": "node notify-watch-dist-done.js",
        "rebuild-and-serve": "run-s build notify serve-dist",
        "ngrok": "cd .. && run-s ngrok",
        "generate": "cd .. && run-s generate",
        "update-overlay-register": "ts-node tools/update-overlay-register.ts",
        "inspect-config": "vue-cli-service inspect"
    },
    "dependencies": {
        "@codeo/vue-burger-menu": "^2.1.0",
        "@google/maps": "^0.5.5",
        "@types/googlemaps": "^3.39.13",
        "@types/js-cookie": "^2.2.0",
        "@types/socket.io": "^2.1.0",
        "axios": "^0.18.0",
        "dotenv": "^6.1.0",
        "fast-safe-stringify": "^2.0.7",
        "google-maps": "^3.3.0",
        "inobounce": "^0.1.6",
        "js-cookie": "^2.2.0",
        "lodash": "^4.17.15",
        "luxon": "^1.5.0",
        "md5": "^2.2.1",
        "register-service-worker": "^1.6.2",
        "shave": "^2.5.2",
        "smart-app-banner": "^2.0.0",
        "socket.io-client": "^2.3.0",
        "swiper": "^4.4.2",
        "urijs": "^1.19.1",
        "v-autocomplete": "git+https://github.com/jondrummond-codeo/v-autocomplete.git",
        "vee-validate": "2.0.9",
        "vue": "2.5.17",
        "vue-backtotop": "^1.4.12",
        "vue-class-component": "^6.2.0",
        "vue-currency-filter": "3.2.0",
        "vue-lazyload": "^1.2.6",
        "vue-mixin-decorator": "^1.0.0",
        "vue-property-decorator": "^7.2.0",
        "vue-router": "3.0.7",
        "vuex": "^3.0.1",
        "vuex-class": "^0.3.1",
        "vuex-i18n": "^1.10.5",
        "vuex-persist": "^2.0.0"
    },
    "devDependencies": {
        "@babel/polyfill": "^7.2.5",
        "@fortawesome/fontawesome-pro": "^5.5.0",
        "@types/datejs": "0.0.31",
        "@types/faker": "^4.1.4",
        "@types/glob": "^7.1.1",
        "@types/jest": "^23.1.4",
        "@types/js-levenshtein": "^1.1.0",
        "@types/lodash": "^4.14.136",
        "@types/luxon": "^1.4.1",
        "@types/node": "^10.12.0",
        "@types/semver": "^7.3.4",
        "@types/swiper": "^4.4.1",
        "@types/urijs": "^1.15.38",
        "@types/uuid": "^3.4.4",
        "@types/vuex-i18n": "^1.7.1",
        "@types/webpack-env": "^1.13.6",
        "@types/which": "^1.3.1",
        "@types/yargs": "^15.0.9",
        "@types/zenscroll": "^4.0.0",
        "@vue/cli-plugin-babel": "^3.0.0",
        "@vue/cli-plugin-pwa": "^3.0.0",
        "@vue/cli-plugin-typescript": "^3.0.0",
        "@vue/cli-plugin-unit-jest": "^3.0.0",
        "@vue/cli-service": "^3.0.0",
        "@vue/test-utils": "^1.0.0-beta.20",
        "babel-cli": "^6.26.0",
        "babel-core": "^6.26.3",
        "babel-preset-es2015-ie": "^6.7.0",
        "babel-preset-stage-0": "^6.24.1",
        "chalk": "^2.4.2",
        "copy-webpack-plugin": "^5.0.0",
        "cross-env": "^5.2.0",
        "datejs": "^1.0.0-rc3",
        "debug": "^4.1.1",
        "exec-step": "^0.3.0",
        "expect-more-jest": "^2.3.0",
        "faker": "^4.1.0",
        "glob": "^7.1.3",
        "graceful-fs": "https://github.com/mekwall/node-graceful-fs.git#patch-1",
        "html-webpack-externals-plugin": "^3.8.0",
        "install-changed": "^1.0.7",
        "jest": "x",
        "jest-junit": "^5.2.0",
        "mkdirp": "^0.5.1",
        "mutation-observer": "^1.0.3",
        "node-notifier": "^5.3.0",
        "node-sass": "^4.9.3",
        "nodemon": "^1.18.4",
        "npm-run-all": "^4.1.3",
        "polyfill-crypto.getrandomvalues": "^1.0.0",
        "promise-parallel-throttle": "^3.3.0",
        "promisify": "0.0.3",
        "rimraf": "^2.6.3",
        "sass-loader": "^7.1.0",
        "semver": "^7.3.2",
        "serve": "^10.1.1",
        "ts-jest": "x",
        "ts-node": "^8.0.2",
        "typescript": "^3.9.7",
        "uuid": "^3.3.2",
        "vue-segment-analytics": "^0.3.1",
        "vue-template-compiler": "2.5.17",
        "which": "^1.3.1",
        "yargs": "^16.1.0",
        "zenscroll": "^4.0.2"
    },
    "release": {
        "analyzeCommits": "simple-commit-message"
    }
}

Expected behavior

Expected tests to run as they had done the day before. I know that jest and ts-jest don't follow semver, but the change is at a minor version, so breakage is unexpected.

Debug log:

{"context":{"logLevel":20,"namespace":"Importer","package":"ts-jest","version":"26.4.2"},"message":"creating Importer singleton","sequence":1,"time":"2020-10-28T14:38:31.702Z"}
{"context":{"actualVersion":"26.6.1","expectedVersion":">=26 <27","logLevel":20,"namespace":"versions","package":"ts-jest","version":"26.4.2"},"message":"checking version of jest: OK","sequence":2,"time":"2020-10-28T14:38:31.716Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":3,"time":"2020-10-28T14:38:31.716Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":4,"time":"2020-10-28T14:38:31.718Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":5,"time":"2020-10-28T14:38:31.845Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":6,"time":"2020-10-28T14:38:31.845Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":7,"time":"2020-10-28T14:38:31.945Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":8,"time":"2020-10-28T14:38:31.945Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":9,"time":"2020-10-28T14:38:32.054Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":10,"time":"2020-10-28T14:38:32.054Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":11,"time":"2020-10-28T14:38:32.156Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":12,"time":"2020-10-28T14:38:32.156Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":13,"time":"2020-10-28T14:38:32.283Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":14,"time":"2020-10-28T14:38:32.283Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":15,"time":"2020-10-28T14:38:32.433Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":16,"time":"2020-10-28T14:38:32.432Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":17,"time":"2020-10-28T14:38:32.553Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":18,"time":"2020-10-28T14:38:32.553Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":19,"time":"2020-10-28T14:38:32.640Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":20,"time":"2020-10-28T14:38:32.641Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":21,"time":"2020-10-28T14:38:32.730Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":22,"time":"2020-10-28T14:38:32.730Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":23,"time":"2020-10-28T14:38:32.813Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":24,"time":"2020-10-28T14:38:32.814Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":25,"time":"2020-10-28T14:38:32.903Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":26,"time":"2020-10-28T14:38:32.903Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":27,"time":"2020-10-28T14:38:32.985Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":28,"time":"2020-10-28T14:38:32.986Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":29,"time":"2020-10-28T14:38:33.075Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":30,"time":"2020-10-28T14:38:33.075Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":31,"time":"2020-10-28T14:38:33.176Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":32,"time":"2020-10-28T14:38:33.176Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":33,"time":"2020-10-28T14:38:33.267Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":34,"time":"2020-10-28T14:38:33.267Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":35,"time":"2020-10-28T14:38:33.360Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":36,"time":"2020-10-28T14:38:33.360Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":37,"time":"2020-10-28T14:38:33.447Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":38,"time":"2020-10-28T14:38:33.448Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":39,"time":"2020-10-28T14:38:33.543Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":40,"time":"2020-10-28T14:38:33.543Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":41,"time":"2020-10-28T14:38:33.653Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":42,"time":"2020-10-28T14:38:33.653Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":43,"time":"2020-10-28T14:38:33.752Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":44,"time":"2020-10-28T14:38:33.752Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":45,"time":"2020-10-28T14:38:33.842Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":46,"time":"2020-10-28T14:38:33.843Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":47,"time":"2020-10-28T14:38:33.938Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":48,"time":"2020-10-28T14:38:33.938Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":49,"time":"2020-10-28T14:38:34.026Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":50,"time":"2020-10-28T14:38:34.026Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":51,"time":"2020-10-28T14:38:34.132Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":52,"time":"2020-10-28T14:38:34.132Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":53,"time":"2020-10-28T14:38:34.227Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":54,"time":"2020-10-28T14:38:34.227Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":55,"time":"2020-10-28T14:38:34.323Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":56,"time":"2020-10-28T14:38:34.323Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":57,"time":"2020-10-28T14:38:34.414Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":58,"time":"2020-10-28T14:38:34.414Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":59,"time":"2020-10-28T14:38:34.511Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":60,"time":"2020-10-28T14:38:34.512Z"}
{"context":{"logLevel":20,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"created new transformer","sequence":61,"time":"2020-10-28T14:38:34.550Z"}
{"context":{"logLevel":30,"namespace":"ts-jest-transformer","package":"ts-jest","version":"26.4.2"},"message":"no matching config-set found, creating a new one","sequence":62,"time":"2020-10-28T14:38:34.550Z"}

envinfo

System:
    OS: Windows 10, 64-bit, 19041.572
    Node version: 12.18.0

Npm packages:
    jest: 26.6.1
    ts-jest: 26.4.2, 26.4.3
    typescript: 3.9.7
    babel-core: 6.26.3

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions