Jest.js 类型错误:笑话:转换必须导出某些内容

2ledvvac  于 2023-02-10  发布在  Jest
关注(0)|答案(7)|浏览(196)

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

我在哪里没有正确配置它?

6ljaweal

6ljaweal1#

我试着用Node debugger(类似node inspect test.js的东西)调试Jest,我找到了罪魁祸首。对我来说,它是jest-svg-transformer包。显然,它与jest@27不兼容。
通常,如果jest.config.jstransform节中的某个项目损坏,则会出现此错误。

n3h0vuf2

n3h0vuf22#

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

jfewjypa

jfewjypa3#

我遇到了这个错误,它最终成为我的jest.configtransform)中的一个配置错误。
我有一个应该在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 = {};
c2e8gylq

c2e8gylq4#

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

ercv8c1e

ercv8c1e5#

如果从jest@28升级到jest@29,则应更改转换器以返回对象{code:"foo"},而不是直接返回字符串"foo"

    • 笑话@28**
process(sourceText, sourcePath, options) {
  return `foo+bar`;
}
    • 笑话@29**
process(sourceText, sourcePath, options) {
  return {code: `foo + bar`};
}

参考:https://jestjs.io/docs/28.x/upgrading-to-jest28%23transformer

quhf5bfb

quhf5bfb6#

我和你有同样的问题。
对我来说,它最终是因为我有以下软件包的旧版本:

  • ts装载机
  • 茨杰斯特
  • ts节点
8zzbczxx

8zzbczxx7#

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

相关问题