平滑升级)
测试开发工具【免费下载链接】ts-jestA Jest transformer with source map support that lets you use Jest to test projects written in TypeScript.项目地址https://gitcode.com/gh_mirrors/ts/ts-jest点击查看免费下载本指南基于 ts-jest 开源仓库一个为 Jest 提供 TypeScript 支持与 source map 能力的 transformer的官方迁移文档系统讲解如何借助内置 CLI 工具config:migrate将旧版本23.10 及更早的 Jest 配置一键迁移到新的配置架构。读完本文你将掌握config:migrate的完整命令用法、全部参数含义、底层迁移规则与输出行为并能独立完成对jest.config.js或package.json中 Jest 配置的迁移与验证。为什么需要迁移旧配置与新架构的差异在 ts-jest 早期版本23.10 及以前用户通常通过两个途径配置 ts-jest 的行为在 Jest 配置的transform字段中将 ts-jest 直接指定为转换器字符串例如ts-jest或指向node_modules/ts-jest/preprocessor.js通过globals[ts-jest]甚至更古老的globals.__TS_CONFIG__、globals.__TRANSFORM_HTML__等全局键来传递编译选项。而从新版本开始配置架构发生了显著变化配置位置改变ts-jest 的专属选项被收敛到transform字段对应的转换器配置对象中即transform中的值从字符串ts-jest变为[ts-jest, { ...options }]详见 src/types.ts 中TsJestTransformerOptions的定义预设Preset机制引入官方提供ts-jest/presets/default、ts-jest/presets/js-with-ts、ts-jest/presets/js-with-babel等预设统一封装了transform正则与扩展名处理旧全局键被废弃globals.__TS_CONFIG__、globals.ts-jest.typeCheck、globals.ts-jest.tsConfigFile、globals.ts-jest.useBabelrc等一批旧选项均已移除或改名。手动迁移这些散落的配置项既繁琐又容易遗漏因此 ts-jest 在 CLI 中内置了config:migrate子命令自动完成整套迁移。快速开始一行命令迁移配置场景一配置写在jest.config.js中如果你使用独立的jest.config.js文件CommonJS 形式通过module.exports导出配置直接以该文件为参数运行迁移命令NPMnpx ts-jest config:migrate jest.config.jsYarnyarn ts-jest config:migrate jest.config.js场景二配置写在package.json的jest字段中如果你习惯把 Jest 配置放在package.json的jest属性下把目标文件换成package.json即可NPMnpx ts-jest config:migrate package.jsonYarnyarn ts-jest config:migrate package.json从 src/cli/config/migrate.ts 的入口逻辑可以看到命令会先校验文件是否存在不存在时报错Configuration file xxx does not exists.再校验扩展名是否合法随后通过basename判断如果文件名恰好是package.json则自动读取其中的jest属性作为待迁移配置actualConfig actualConfig.jest若文件中没有jest属性则按空配置处理。命令的合法输入类型config-file参数只接受JavaScript 或 JSON 文件源码中通过/\.(js|json)$/正则校验不满足时抛出must be a JavaScript or JSON file错误。也就是说.js、.json以及package.json都在支持范围内其他类型如.yaml、.ts配置文件目前不在该命令的支持清单内。命令参数详解通过ts-jest help config:migrate可以查看该命令的完整帮助信息其输出与 src/cli/config/migrate.ts 中的help实现一致如下Usage: ts-jest config:migrate [options] config-file Arguments: config-file Can be a js or json Jest config file. If it is a package.json file, the configuration will be read from the jest property. Options: --js ts|babel Process .js files with ts-jest if ts or with babel-jest if babel --no-jest-preset Disable the use of Jest presets参数类型说明config-file必填待迁移的 Jest 配置文件.js/.json/package.json--js ts可选需要同时处理.js文件时指定用 ts-jest 转换 JS--js babel可选需要同时处理.js文件时指定用 babel-jest 转换 JS--no-jest-preset可选禁用预设机制不自动套用 ts-jest 预设其中--js的值在 src/cli/index.ts 的 CLI 参数解析中被强制校验只能为babel或ts传入其他值会直接报错。此外旧版的--allow-js选项已被弃用当检测到--allow-js时CLI 会将其等价转换为--js ts见 src/cli/index.ts且--allow-js与--js不能同时出现。迁移的内部原理旧配置项如何被回迁迁移的核心逻辑位于 src/utils/backports.ts 的backportJestConfig函数它逐项扫描旧配置中的废弃键并映射到新架构下的等价配置。完整的旧→新映射关系如下旧配置已废弃新配置转换规则globals.__TS_CONFIG__globals.ts-jest.tsconfig对象值直接搬移非对象值忽略globals.__TRANSFORM_HTML__globals.ts-jest.stringifyContentPathRegex为真时写入\.html?$globals.ts-jest.typeCheckglobals.ts-jest.isolatedModules取反typeCheck: true→isolatedModules: falseglobals.ts-jest.tsConfigFileglobals.ts-jest.tsconfig文件路径字符串搬移globals.ts-jest.tsConfigglobals.ts-jest.tsconfig配置内容搬移globals.ts-jest.enableTsDiagnosticsglobals.ts-jest.diagnostics为真时写{ warnOnly: true }可附exclude为假时写falseglobals.ts-jest.useBabelrcglobals.ts-jest.babelConfigtrue→true其余 →{}globals.ts-jest.skipBabelglobals.ts-jest.babelConfigfalse且未设置 babelConfig 时写true每迁移一项CLI 都会在日志中输出对应的废弃提示如[jest-config].globals.ts-jest.typeCheck is deprecated, use [jest-config].globals.ts-jest.isolatedModules instead。值得注意的是__TRANSFORM_HTML__这类全局键会从globals中被删除而新值会被合并进globals[ts-jest]。此外backportJestConfig还会处理环境变量的回迁TS_JEST_DEBUG已被TS_JEST_LOG取代见 src/utils/backports.ts。transform 字段的规范化在完成旧选项回迁后src/cli/config/migrate.ts 会对transform字段做两类处理字符串 → 数组规范化凡是值包含ts-jest的转换器条目其值会被重写为[ts-jest, globalsTsJestConfig]把原来散落在globals[ts-jest]里的选项内联到 transform 条目中不涉及 ts-jest 的条目如babel-jest原样保留。与预设合并如果配置中原本使用了 ts-jest 预设或根据--js参数选定了预设则会把该预设对应的transform规则与已有 transform 合并src/cli/config/migrate.ts合并所用预设定义在 src/presets/create-jest-preset.ts 中默认预设^.\.tsx?$ → [ts-jest, {...}]js-with-ts预设^.\\.[tj]sx?$ → [ts-jest, {...}]同时处理 TS 与 JSjs-with-babel预设^.\.jsx?$ → babel-jest^.\.tsx?$ → [ts-jest, {...}]。预设名称常量定义在 src/cli/helpers/presets.ts分别为ts-jest/presets/default、ts-jest/presets/js-with-ts、ts-jest/presets/js-with-babel。冗余项的清理规则为了输出尽量精简的配置迁移工具还会执行以下清理见 src/cli/config/migrate.ts 与cleanupConfig当配置里已经显式设置了testRegex字符串或非空数组时直接删除testMatch避免两者冲突当testMatch、moduleFileExtensions与所选预设的默认值完全一致时从结果中删除这些冗余字段从最终配置中删除preset字段、空的globals、空的transform对moduleFileExtensions与testMatch数组做去重并排序。迁移输出stdout 与 stderr 的分工config:migrate的设计是只输出到终端、不直接改写文件迁移后的新配置通过process.stdout打印并带上前缀JSON 文件输出jest: { ... }供放回package.json使用JS 文件输出module.exports { ... }可直接替换原jest.config.js内容对应实现见 src/cli/config/migrate.ts提示信息如Migrated Jest configuration:写入stderr如果经过全部分析后新旧配置完全一致则输出No migration needed for given Jest configuration并提前返回不产生任何迁移内容。将迁移结果复制回原配置文件即可完成升级。以从package.json迁移为例旧配置{ jest: { globals: { ts-jest: { tsconfig: { target: es6 } } } } }迁移后将输出jest: { transform: { ^.\\.tsx?$: [ ts-jest, { tsconfig: { target: es6 } } ] } }同样jest.config.js场景下输出形如module.exports { transform: { ^.\\.tsx?$: [ts-jest, {}] } }的 CommonJS 配置。若传入--js ts或等价的--allow-js则生成的正则变为^.\\.[tj]sx?$以覆盖.js文件。用测试验证迁移行为仓库的 CLI 测试套件 src/cli/cli.spec.ts 对config:migrate的行为做了详尽覆盖可作为理解迁移规则与排查问题的参考错误处理配置文件不存在时输出does not exists并失败退出扩展名非法时报must be a JavaScript or JSON filepackage.json 迁移从jest属性读取并迁移globals[ts-jest]中的选项预设迁移配置中存在preset: ts-jest时按预设生成对应的 transform 规则testRegex 优先级配置了testRegex含空数组场景时删除testMatchtransform 合并已有自定义 transform 条目如^src/js/.\\.jsx?$: babel-jest会保留并与 ts-jest 默认规则合并输出transform 值规范化rootDir/node_modules/ts-jest/preprocessor.js、rootDir/node_modules/ts-jest等旧写法均会被规范化为[ts-jest, {}]。测试中还确认了迁移命令不会自动写入文件fs.writeFileSync不会被调用所有结果以标准输出形式呈现这与上文提到的复制回配置文件的使用方式一致。迁移后的手工检查清单config:migrate处理的是配置架构层面的迁移升级后建议再人工核对以下几点确认transform已内联检查每个 ts-jest 条目是否已是[ts-jest, { ... }]数组形式globals中不再残留__TS_CONFIG__等旧键确认包版本匹配迁移面向从 23.10 及更早版本升级的用户请同步将ts-jest与jest升级到与本文档配套的版本线本仓库 28.0 版本文档对应示例见 website/versioned_docs/version-28.0必要时参考 安装与版本检查文档核对 tsconfig 与预设如果你需要处理.js文件确认--js ts/--js babel的选择与tsconfig.json中的allowJs设置一致避免运行时出现Got a.jsfile to compile whileallowJsoption is not set totrue之类的报错该错误消息定义在 src/utils/messages.ts运行一次完整测试迁移后执行npx jest或对应测试命令确认测试发现、转换与运行结果均正常。如果在迁移过程中或升级后遇到配置相关问题还可以参考仓库中的 TROUBLESHOOTING.md 与官网文档中的 配置项说明其中包含tsconfig、diagnostics、isolatedModules、babelConfig等新架构下全部选项的详细说明帮助你在迁移之后继续按需调优配置。赞分享测试开发工具【免费下载链接】ts-jestA Jest transformer with source map support that lets you use Jest to test projects written in TypeScript.项目地址https://gitcode.com/gh_mirrors/ts/ts-jest点击查看免费下载相关推荐使用 ts-jest config:migrate 迁移旧版 Jest 配置从 v23.10 及更早版本平滑升级使用 ts jest config:migrate 迁移旧版 Jest 配置从 v23.10 及更早版本平滑升级 ts jest 在 24.0 起重构了配置方测试开发工具ts-jest 配置迁移指南使用 config:migrate 将 Jest 配置从 23.10 及更早版本升级ts jest 配置迁移指南使用 config:migrate 将 Jest 配置从 23.10 及更早版本升级 从 ts jest 24 开始ts jes测试开发工具EMQX 新增节点级指标/api/v5/prometheus/stats 端点暴露 emqx_vm_uptime_ms 与 emqx_vm_max_fdsEMQX 新增节点级指标 /api/v5/prometheus/stats 端点暴露 emqx_vm_uptime_ms 与 emqx_vm_max_fds测试开发工具上一篇TIL 实战用 Jest --coverage 统计测试覆盖率读懂语句/分支/函数/行四维指标下一篇Pure.DI Native AOT支持构建极致性能的.NET应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考