Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ts-jest does not support new Babel 7 Project-wide config file #933

Closed
paulrehkugler opened this issue Jan 4, 2019 · 5 comments · Fixed by #1332
Closed

ts-jest does not support new Babel 7 Project-wide config file #933

paulrehkugler opened this issue Jan 4, 2019 · 5 comments · Fixed by #1332
Labels

Comments

@paulrehkugler
Copy link

Issue :

Babel 7’s Project-wide config file is named babel.config.js, implying it is a JavaScript file, but ts-jest uses json5.parse(readFileSync(babelConfig.value, 'utf8')) to parse the config. This results in an error, because our JavaScript configuration cannot be parsed as JSON.

Expected behavior :

The JavaScript file would be able to be parsed as a babel project-wide configuration. ts-jest’s docs also suggest that JS files are acceptable.

Debug log:

log file content
# content of ts-jest.log :

{"context":{"logLevel":20,"namespace":"Importer","package":"ts-jest","version":"23.10.5"},"message":"creating Importer singleton","sequence":1,"time":"2019-01-04T22:19:32.262Z"}
{"context":{"allowJs":false,"logLevel":20,"namespace":"jest-preset","package":"ts-jest","version":"23.10.5"},"message":"creating jest presets not handling JavaScript files","sequence":2,"time":"2019-01-04T22:19:32.268Z"}
{"context":{"actualVersion":"23.6.0","expectedVersion":">=22 <24","logLevel":20,"namespace":"versions","package":"ts-jest","version":"23.10.5"},"message":"checking version of jest: OK","sequence":3,"time":"2019-01-04T22:19:32.271Z"}
{"context":{"baseOptions":{},"logLevel":20,"namespace":"jest-transformer","package":"ts-jest","transformerId":1,"version":"23.10.5"},"message":"created new transformer","sequence":4,"time":"2019-01-04T22:19:32.272Z"}
{"context":{"fileName":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/src/dummy.tests.ts","logLevel":20,"namespace":"jest-transformer","package":"ts-jest","transformOptions":{"instrument":false,"rootDir":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo"},"transformerId":1,"version":"23.10.5"},"message":"computing cache key for /Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/src/dummy.tests.ts","sequence":5,"time":"2019-01-04T22:19:32.273Z"}
{"context":{"logLevel":30,"namespace":"jest-transformer","package":"ts-jest","transformerId":1,"version":"23.10.5"},"message":"no matching config-set found, creating a new one","sequence":6,"time":"2019-01-04T22:19:32.273Z"}
{"context":{"config":{"automock":false,"browser":false,"cache":true,"cacheDirectory":"/var/folders/31/qs9vmhyd09g85lkk1ktcz5tw0000gn/T/jest_dx","clearMocks":false,"coveragePathIgnorePatterns":["/node_modules/"],"cwd":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo","detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"filter":null,"forceCoverageMatch":[],"globals":{"ts-jest":{"babelConfig":"babel.config.js"}},"haste":{"providesModuleNodeModules":[]},"moduleDirectories":["node_modules"],"moduleFileExtensions":["js","jsx","json","ts","tsx","d.ts"],"moduleNameMapper":[],"modulePathIgnorePatterns":[],"name":"6ed986b4806ca7fc593176c5d57d2dee","prettierPath":null,"resetMocks":false,"resetModules":false,"resolver":null,"restoreMocks":false,"rootDir":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo","roots":["/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo"],"runner":"jest-runner","setupFiles":[],"setupTestFrameworkScriptFile":null,"skipFilter":false,"snapshotSerializers":[],"testEnvironment":"jest-environment-jsdom","testEnvironmentOptions":{},"testLocationInResults":false,"testMatch":["**/__tests__/**/*.js?(x)","**/?(*.)(spec|test).js?(x)","**/tests.(js|jsx|ts|tsx)","**/*.tests.(js|jsx|ts|tsx)"],"testPathIgnorePatterns":["/node_modules/"],"testRegex":"","testRunner":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/node_modules/jest-jasmine2/build/index.js","testURL":"http://localhost","timers":"real","transform":[[".(js|jsx|ts|tsx)","/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/node_modules/ts-jest/dist/index.js"]],"transformIgnorePatterns":["/node_modules/"],"watchPathIgnorePatterns":[]},"logLevel":20,"namespace":"backports","package":"ts-jest","transformerId":1,"version":"23.10.5"},"message":"backporting config","sequence":7,"time":"2019-01-04T22:19:32.273Z"}
{"context":{"jestConfig":{"automock":false,"browser":false,"cache":true,"cacheDirectory":"/var/folders/31/qs9vmhyd09g85lkk1ktcz5tw0000gn/T/jest_dx","clearMocks":false,"coveragePathIgnorePatterns":["/node_modules/"],"cwd":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo","detectLeaks":false,"detectOpenHandles":false,"errorOnDeprecated":false,"filter":null,"forceCoverageMatch":[],"globals":{"ts-jest":{"babelConfig":"babel.config.js"}},"haste":{"providesModuleNodeModules":[]},"moduleDirectories":["node_modules"],"moduleFileExtensions":["js","jsx","json","ts","tsx","d.ts"],"moduleNameMapper":[],"modulePathIgnorePatterns":[],"name":"6ed986b4806ca7fc593176c5d57d2dee","prettierPath":null,"resetMocks":false,"resetModules":false,"resolver":null,"restoreMocks":false,"rootDir":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo","roots":["/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo"],"runner":"jest-runner","setupFiles":[],"setupTestFrameworkScriptFile":null,"skipFilter":false,"snapshotSerializers":[],"testEnvironment":"jest-environment-jsdom","testEnvironmentOptions":{},"testLocationInResults":false,"testMatch":["**/__tests__/**/*.js?(x)","**/?(*.)(spec|test).js?(x)","**/tests.(js|jsx|ts|tsx)","**/*.tests.(js|jsx|ts|tsx)"],"testPathIgnorePatterns":["/node_modules/"],"testRegex":"","testRunner":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/node_modules/jest-jasmine2/build/index.js","testURL":"http://localhost","timers":"real","transform":[[".(js|jsx|ts|tsx)","/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/node_modules/ts-jest/dist/index.js"]],"transformIgnorePatterns":["/node_modules/"],"watchPathIgnorePatterns":[]},"logLevel":20,"namespace":"config","package":"ts-jest","transformerId":1,"version":"23.10.5"},"message":"normalized jest config","sequence":8,"time":"2019-01-04T22:19:32.273Z"}
{"context":{"fromPath":"babel.config.js","logLevel":20,"namespace":"config","package":"ts-jest","toPath":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/babel.config.js","transformerId":1,"version":"23.10.5"},"message":"resolved path from babel.config.js to /Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/babel.config.js","sequence":9,"time":"2019-01-04T22:19:32.274Z"}
{"context":{"logLevel":20,"namespace":"config","package":"ts-jest","transformerId":1,"tsJestConfig":{"babelConfig":{"kind":"file","value":"/Users/rehkugler/Documents/Development/ts-jest-babel-7-project-wide-config-repro-repo/babel.config.js"},"compiler":"typescript","diagnostics":{"ignoreCodes":[6059,18002,18003],"pretty":true,"throws":true},"isolatedModules":false,"transformers":[],"tsConfig":{"kind":"file"}},"version":"23.10.5"},"message":"normalized ts-jest config","sequence":10,"time":"2019-01-04T22:19:32.275Z"}

Minimal repo :

https://github.com/paulrehkugler/ts-jest-babel-7-project-wide-config-repro-repo

@GeeWee
Copy link
Collaborator

GeeWee commented Mar 1, 2019

Would love a PR for this, should be reasonably simple.

@ronghang
Copy link

ronghang commented Mar 19, 2019

I set the babelConfig: 'babelrc.json', it looks like json file is also not support.
The error: Configuration contains string/RegExp pattern, but no filename was passed to Babel.

@liamjones
Copy link

The way I've been working around this for now is by using the new jest.config.js format and inlining the babel.config.js via a require:

// jest.config.js
module.exports = {
    globals: {
        'ts-jest': {
            babelConfig: require('./babel.config.js')
        }
    }
}

@Ore4444
Copy link

Ore4444 commented Nov 12, 2019

@liamjones 's solution is not working for me.
I'm getting the same behavior when babelConfig: require('./babel.config.js') or babelConfig: true

This is my babel.config.js

module.exports = {
    sourceType: 'unambiguous',
    comments: false,

    ignore: [
        'node_modules',
        '*.spec.ts',
    ],

    presets: [
        ['@babel/preset-typescript', {allExtensions: true}],
        ['@babel/preset-env', {
            corejs: 3,
            debug: false,
            targets: {
                node: true,
            },
            useBuiltIns: "usage",
        }],
    ],

    plugins: [
        ['@babel/plugin-proposal-object-rest-spread', {
            useBuiltIns: true, loose: true,
        }],
        '@babel/plugin-proposal-export-default-from',
        '@babel/plugin-proposal-class-properties',
        '@babel/plugin-proposal-optional-chaining',
        ['@babel/plugin-proposal-decorators', {
            legacy: true,
        }],
    ],
}

@ntucker
Copy link

ntucker commented Jan 1, 2020

Please release a new version

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants