TypeScript ts-jest 预处理器的目的是啥?
Posted
技术标签:
【中文标题】TypeScript ts-jest 预处理器的目的是啥?【英文标题】:What's the purpose of TypeScript ts-jest pre-processor?TypeScript ts-jest 预处理器的目的是什么? 【发布时间】:2018-12-02 19:56:30 【问题描述】:我对 TypeScript(和 javascript)还很陌生,所以这可能很明显,但我不明白使用像 ts-jest 这样的预处理模块来针对 TypeScript 代码运行 Jest 测试有什么意义。我正在 Node 上开发一个 TypeScript 项目,我正在使用 Jest 测试所有内容,到目前为止它运行良好。
我正在将我的 TypeScript 代码(和测试)转换为 JavaScript (ES5),然后我正在使用 Jest 对转换后的 ES5 JavaScript 运行 Jest - 一切正常,无需 ts-jest。
那么使用 ts-jest 有什么意义呢?换句话说——我会在什么情况下使用它?
我看到过像 here 这样的建议,使用 ts-jest 来“预处理打字稿文件”,但我不明白。我认为 TypeScript 的全部意义在于它为您处理所有这些,那么为什么您需要使用 ts-jest 单独执行这些操作呢?此外,没有它我也能过得很好。
也许我没有得到:
-
转译和预处理的区别
Jest的transform property的含义
这是我的 tsconfig.json:
"compilerOptions":
"strictNullChecks": true,
"noImplicitAny": true,
"moduleResolution": "node",
"target": "es5",
"lib": [
"es6"
]
,
"include": [
"src/**/*",
"test/**/*",
],
这是我的 package.json 的 sn-p:
"scripts":
"test": "jest",
"dev": "nodemon ./src/app",
"start": "node ./src/app"
,
"devDependencies":
"@types/express": "^4.16.0",
"@types/jest": "^23.1.1",
"jest": "^23.1.0",
"nodemon": "^1.17.5"
,
"jest":
"transform": ,
"testRegex": "/test/.*\\.(ts|tsx|js)$"
【问题讨论】:
【参考方案1】:我注意到的第一件事是你的 package.json 中没有打字稿。这意味着您已经全局安装了 typescript 编译器,从命令行运行它,并让 .js 文件与 .ts 文件并排生成。当你运行 node 时,它会运行 .js 文件。
虽然这种方法看起来很方便,但它依赖于全局安装的 tsc,并且依赖于手动运行 tsc。这使得不熟悉项目的人很难运行这个项目(即使你是几个月的时间)。 要解决此问题,您可以在本地安装 typescript(将其添加到 package.json),然后自动运行它(npm run start)。
现在,关于您的问题: 1.转译和预处理的区别
其实是一样的
-
Jest的transform属性的含义
这简化了测试运行,您不必全局安装 typescript 并手动运行。 Ts-jest 为您转换它。
您可能还想看看https://github.com/TypeStrong/ts-node,它类似于节点,但您不需要自己转译打字稿。
并且 nodemon 支持这样的打字稿(nodemon.js):
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.test.ts"],
"exec": "ts-node ./src/index.ts"
【讨论】:
是的,我确实在全球范围内安装了 Typescript,但我使用的是对 TypeScript 具有原生支持的 VS Code,因此编译我的代码不是问题。至于“转译和预处理”以及它们是如何相同的 - 谢谢,我只是觉得有多个术语表示同一件事令人困惑。至于 ts-jest 为我转换我的代码 - 再次,看起来 ts-jest 只是在做 TypeScript 已经在做的事情 - 将 TypeScript 转换为 JavaScript。所以如果我在本地安装 TypeScript,我仍然看不到 ts-jest 的需要。至于 ts-node - 再次,我不明白目的 - TypeScript 为我做这个以上是关于TypeScript ts-jest 预处理器的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Jest mock 总是给出 undefined (typescript + ts-jest)
Jest、Typescript、ts-jest:覆盖范围略有不正确
为 react typescript 项目设置 ts-jest