TypeError:开玩笑:转换必须导出某些东西
Posted
技术标签:
【中文标题】TypeError:开玩笑:转换必须导出某些东西【英文标题】:TypeError: Jest: a transform must export something 【发布时间】:2021-08-13 21:09:12 【问题描述】:配置jest
、node.js
和typescript
后,脚本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
【参考方案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.js
的 transform 部分中的某些项目损坏,则会引发此错误。
【讨论】:
也发生在我身上。换成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
【讨论】:
以上是关于TypeError:开玩笑:转换必须导出某些东西的主要内容,如果未能解决你的问题,请参考以下文章
开玩笑测试 - TypeError:document.createRange 不是函数
用 TypeScript 开玩笑:TypeError: environment.teardown 不是函数
TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数
开玩笑 - 测试给出错误 TypeError: Cannot read property 'then' of undefined