使用.ts文件(TypeScript)配置Jest全局测试设置

时间:2018-01-18 09:49:05

标签: typescript jest

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

我发现jest配置中有registerReceiver(receiver, new IntentFilter(Constants.NETWORK_RESULT)); 个选项:

globalSetup

但只有"jest": { "globalSetup": "./jest-config.js" } 文件可用于设置。我想使用.js文件因为我的所有代码 包括在TypeScript中设置的代码。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:7)

我找到了解决方案。

我最初的项目结构是:

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

package.json中的Jest配置:

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

使用此配置ts-jest在内存中执行.ts文件的转换。 我在outDir的{​​{1}}中有compilerOptions选项,但在该outDir中没有写任何内容,因为我不能使用transiled jest-config.js

然后我在src中移动tests文件夹并更改Jest config 。 该项目的新结构是:

tsconfig.json

New Jest配置为:

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

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

加成

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

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

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

答案 1 :(得分: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 的更多信息。