【问题标题】: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 单独执行这些操作呢?此外,没有它我也能过得很好。

也许我没有得到:

  1. 转译和预处理的区别
  2. 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)$"
  }
}

【问题讨论】:

    标签: javascript unit-testing typescript jestjs


    【解决方案1】:

    我注意到的第一件事是你的 package.json 中没有打字稿。这意味着您已经全局安装了 typescript 编译器,从命令行运行它,并让 .js 文件与 .ts 文件并排生成。当你运行 node 时,它​​会运行 .js 文件。

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

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

    其实是一样的

    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 为我做这个
    猜你喜欢
    • 2016-11-20
    • 2019-12-12
    • 2018-12-11
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2017-03-18
    • 2020-04-07
    • 2013-09-11
    相关资源
    最近更新 更多