19
votes

After configuring jest, node.js and typescript the script npx jest throws the error in a console

TypeError: Jest: a transform must export something.
    at C:\projects\project-api\node_modules\@jest\transform\build\ScriptTransformer.js:386:19
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async Promise.all (index 0)
    at async ScriptTransformer.loadTransformers (C:\projects\project-api\node_modules\@jest\transform\build\ScriptTransformer.js:378:5)
    at async createScriptTransformer (C:\projects\project-api\node_modules\@jest\transform\build\ScriptTransformer.js:1105:3)
    at async C:\projects\project-api\node_modules\@jest\core\build\TestScheduler.js:283:31
    at async Promise.all (index 0)
    at async TestScheduler.scheduleTests (C:\projects\project-api\node_modules\@jest\core\build\TestScheduler.js:276:5)
    at async runJest (C:\projects\project-api\node_modules\@jest\core\build\runJest.js:387:19)
    at async _run10000 (C:\projects\project-api\node_modules\@jest\core\build\cli\index.js:408:7)

jest.config.js

export default {
  roots: [
    '<rootDir>/src'
  ],
  testMatch: [
    '**/__tests__/**/*.+(ts)',
    '**/?(*.)+(test).+(ts)'
  ],
  transform: {
    '^.+\\.(ts)$': 'ts-jest'
  }
}

Where did I fail to configure it correctly?

5
I was able to fix this issue by updating the ts-jest to the latest version (e.g. yarn add ts-jest@next). See GitHub issueRoman Mahotskyi

5 Answers

21
votes

I had your same issue.

For me, it end up it was because I was having old version of following packages:

  • ts-loader
  • ts-jest
  • ts-node
7
votes

I tried to debug Jest by Node debugger (something like node inspect test.js) , and I found the culprit. For me it was jest-svg-transformer package. Apparently, it not compatible with jest@27.

Generally this error raises if some item in transform section of jest.config.js broken.

6
votes

Running yarn add ts-jest@next solved it for me.

3
votes

I had this error and it ended up being a miss-configuration in my jest.config (transform).

I had a property that should have been inside moduleNameMapper and not transform. Once I updated the file, jest executed correctly.

jest.config.js:

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'jsdom',
  testPathIgnorePatterns: ['/node_modules/', '/dist'],
  collectCoverage: true,
  verbose: true,
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': '<rootDir>/node_modules/babel-jest',
  },
  moduleNameMapper: {
    '\\.(css|scss|less)$': '<rootDir>/test/styleMock.js',
  },
};

where styleMock.js:

module.exports = {};
3
votes

In my case, I had mismatched versions of jest (major version 26) and ts-jest (major version 27). Downgrading ts-jest to major version 26 solved my issue.