【问题标题】:Configure Jest global tests setup with .ts file (TypeScript)使用 .ts 文件 (TypeScript) 配置 Jest 全局测试设置
【发布时间】:2018-06-27 08:16:21
【问题描述】:

我正在使用 ts-jest(Jest 和 TypeScript)并且想要配置 所有测试套件的一些全局设置(初始化测试数据库)。

发现jest配置中有globalSetup选项:

"jest": {
    "globalSetup": "./jest-config.js"
}

但只有.js 文件可用于设置。我想使用.ts 文件,因为我所有的代码 包括 TypeScript 中的设置代码。

我怎样才能做到这一点?

【问题讨论】:

    标签: typescript jestjs


    【解决方案1】:

    我找到了解决办法。

    我最初的项目结构是:

    .
    |--src
    |  |--service.ts
    |--tests
    |  |--service.test.ts
    |--dist
    |--tsconfig.json 
    |--package.json
    

    package.json 中的 Jest 配置:

    "jest": {
      "globals": {
        "ts-jest": {
          "tsconfig": "tsconfig.json"
        }
      },
      "moduleFileExtensions": ["ts","js"],
      "transform": {
        "^.+\\.(ts|tsx)$": "./node_modules/ts-jest/preprocessor.js"
      },
      "testMatch": [
        "**/tests/**/*.test.(ts|js)"
      ],
      "testEnvironment": "node"
    }
    

    使用此配置ts-jest 在内存中执行 .ts 文件的转译。 我在compilerOptionstsconfig.json 中有outDir 选项,但在outDir 中没有写任何内容,因为我不能使用转译的jest-config.js

    然后我在 src 中移动测试文件夹并更改 Jest 配置。 项目的新结构是:

    .
    |--src
    |  |--service.ts
    |  |--tests
    |     |--service.test.ts
    |     |--jest-config.ts
    |--dist
    |--tsconfig.json 
    |--package.json
    

    新的 Jest 配置是:

    "jest": {
      "globalSetup": "./dist/tests/jest-config.js",
      "moduleFileExtensions": ["ts", "js", "json"],
      "testMatch": [
        "**/dist/**/*.test.js"
      ],
      "testEnvironment": "node"
    }
    

    现在我可以在 Jest 中使用 jest-config.js 进行全局设置。

    加法

    • Jest 设置文件(在我的示例中为 jest-config.js)必须导出一个异步函数:

      module.exports = async function() { ... }

    • 在运行测试之前,您需要编译源 .ts 文件。

    【讨论】:

    • 在ts-jest项目中关于这个问题的问题:github.com/kulshekhar/ts-jest/issues/411
    • 这会影响代码覆盖率报告。它会影响调试吗?
    • 谢谢 - 原生 jest+typescript 支持很烂。此解决方案将所有内容都转换为 .js,然后利用玩笑。我花了几个小时试图解决 ts-jest 和 babel 废话。这个解决方案有效!谢谢!
    【解决方案2】:

    全局设置在 ts 环境可用之前执行,因此解决方法是通过在文件开头要求 ts-node 手动创建环境。

    在您的笑话配置中(package.jsonjest.config.js):

    "globalSetup": "./globalSetup.ts"
    

    然后在globalSetup.ts:

    require('ts-node/register');
    
    const setup = (): void => {
      // whatever you need to setup globally
    };
    
    export default setup;
    

    您可以在github 上阅读有关 ts-node 的更多信息。

    【讨论】:

    • 太棒了?? 我的项目结构要求我将这些脚本放在 src 文件夹之外,这个技巧让我非常头疼。需要注意的一件事,我不得不在开玩笑的配置中使用这种形式的路径 - “/path/to/globalSetup.ts”
    • 可以确认这对我有用。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2018-12-11
    • 2020-02-04
    • 2022-08-24
    • 2019-11-26
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多