我正在使用ts-jest(Jest和TypeScript)并想要配置 所有测试套件的一些全局设置(初始化测试数据库)。
我发现jest配置中有registerReceiver(receiver, new IntentFilter(Constants.NETWORK_RESULT));
个选项:
globalSetup
但只有"jest": {
"globalSetup": "./jest-config.js"
}
文件可用于设置。我想使用.js
文件因为我的所有代码
包括在TypeScript中设置的代码。
我怎样才能做到这一点?
答案 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.json
或 jest.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 的更多信息。