我对TypeScript(和JavaScript)还很陌生,所以这也许很明显,但是我不了解使用诸如ts-jest之类的预处理模块来针对TypeScript代码运行Jest测试的意义。我正在Node上开发一个TypeScript项目,并且正在使用Jest测试所有内容,到目前为止效果很好。
我正在将我的TypeScript代码(和测试)转换为JavaScript(ES5),然后使用Jest将Jest与该ES5 JavaScript进行对比-一切都很好,不需要ts-jest。
那么使用ts-jest有什么意义呢?换句话说-在什么情况下我会使用它?
我已经看到像here这样的建议,可以使用ts-jest来“预处理打字稿文件”,但我不明白。我认为TypeScript的全部意义在于它可以为您处理所有这些事情,那么为什么还要使用ts-jest单独进行处理呢?而且,没有它我也很好。
也许我没有得到:
这是我的tsconfig.json:
{
"compilerOptions": {
"strictNullChecks": true,
"noImplicitAny": true,
"moduleResolution": "node",
"target": "es5",
"lib": [
"es6"
]
},
"include": [
"src/**/*",
"test/**/*",
],
}
这是我的package.json的一个片段:
{
"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)$"
}
}
答案 0 :(得分:1)
我注意到的第一件事是,您的package.json中没有打字稿。这意味着您已经全局安装了Typescript编译器,从命令行运行它,并且.js文件与.ts文件同时生成。当您运行节点时,它将运行.js文件。
尽管这种方法似乎很方便,但它依赖于全局安装的tsc,并且依赖于手动运行tsc的人员。这使不熟悉该项目的人很难运行该项目(即使是几个月的时间)。 要解决此问题,您可以在本地安装打字稿(将其添加到package.json中),然后自动运行(npm run start)。
现在,关于您的问题: 1.转译与预处理之间的区别
实际上是同一件事
这简化了测试的运行,您不必全局安装打字稿并手动运行。 Ts-jest会为您进行转换。
您可能还想看看https://github.com/TypeStrong/ts-node,它类似于node,但是您不需要自己翻译打字稿。
nodemon支持这样的打字稿(nodemon.js):
{
"watch": ["src"],
"ext": "ts",
"ignore": ["src/**/*.test.ts"],
"exec": "ts-node ./src/index.ts"
}