TypeScript ts-jest预处理器的目的是什么?

时间:2018-06-23 16:45:01

标签: javascript unit-testing typescript jestjs

我对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单独进行处理呢?而且,没有它我也很好。

也许我没有得到:

  1. 转译和预处理之间的区别
  2. Jest的transform property
  3. 的含义

这是我的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)$"
  }
}

1 个答案:

答案 0 :(得分:1)

我注意到的第一件事是,您的package.json中没有打字稿。这意味着您已经全局安装了Typescript编译器,从命令行运行它,并且.js文件与.ts文件同时生成。当您运行节点时,它将运行.js文件。

尽管这种方法似乎很方便,但它依赖于全局安装的tsc,并且依赖于手动运行tsc的人员。这使不熟悉该项目的人很难运行该项目(即使是几个月的时间)。 要解决此问题,您可以在本地安装打字稿(将其添加到package.json中),然后自动运行(npm run start)。

现在,关于您的问题: 1.转译与预处理之间的区别

  

实际上是同一件事

  1. Jest变换属性的含义
      

    这简化了测试的运行,您不必全局安装打字稿并手动运行。 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"
}