【问题标题】:TypeError: Jest: a transform must export somethingTypeError:开玩笑:转换必须导出某些东西
【发布时间】:2021-08-13 21:09:12
【问题描述】:

配置jestnode.jstypescript 后,脚本npx jest 在控制台中抛出错误

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'
  }
}

我在哪里配置不正确?

【问题讨论】:

  • 我能够通过将ts-jest 更新到最新版本(例如yarn add ts-jest@next)来解决此问题。见GitHub issue

标签: jestjs ts-jest


【解决方案1】:

我遇到了同样的问题。

对我来说,最终是因为我有以下软件包的旧版本:

  • ts-loader
  • ts-jest
  • ts 节点

【讨论】:

  • 这个答案的排列略有不同,我没有安装ts-loader,用yarn add --dev ts-loader安装解决了它
  • 如果使用 npm 然后使用npm i ts-loader --save-dev 安装它以避免包管理器之间的不一致
【解决方案2】:

运行yarn add ts-jest@next 为我解决了这个问题。

【讨论】:

  • 这个答案取决于“下一个”,它会随着时间而改变。你安装了哪个版本的 ts-jest?
【解决方案3】:

我尝试通过 Node 调试器(类似于 node inspect test.js)调试 Jest,但我找到了罪魁祸首。对我来说是jest-svg-transformer 包。显然,它与jest@27 不兼容。

通常,如果 jest.config.jstransform 部分中的某些项目损坏,则会引发此错误。

【讨论】:

  • 也发生在我身上。换成jest-transform-stub
【解决方案4】:

我遇到了这个错误,它最终成为我的jest.config (transform) 中的错误配置。

我有一个属性应该在moduleNameMapper 而不是transform。一旦我更新了文件,jest 就正确执行了。

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',
  },
};

styleMock.js:

module.exports = {};

【讨论】:

    【解决方案5】:

    就我而言,我的 jest(主要版本 26)和 ts-jest(主要版本 27)的版本不匹配。将 ts-jest 降级到主要版本 26 解决了我的问题。

    【讨论】:

      【解决方案6】:

      我的错是自定义转换器导出了 process 函数但不是默认导出,所以我已经按照 jest v27 的相关文档进行了工作:https://jestjs.io/docs/next/code-transformation#typescript-with-type-checking

      【讨论】:

        猜你喜欢
        • 2021-09-22
        • 2014-05-03
        • 2015-04-09
        • 2018-10-27
        • 1970-01-01
        • 2014-09-11
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多