本文介绍了让Jest全局安装和全局拆卸在一个TypeScrip项目中工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想运行一个在运行测试之前打开数据库连接的函数(全局设置)和另一个在运行测试后关闭数据库连接的函数(全局拆卸)。目前我有以下配置:Package.json:
//...
"jest": {
"testEnvironment": "node",
"globalSetup": "./src/jest/globalSetUp.ts",
"globalTeardown": "./src/jest/globalTearDown.ts",
"moduleFileExtensions": [
"js",
"ts"
],
"transform": {
"\.(ts|tsx)$": "ts-jest"
}
}
和我的global SetUp.ts:
import { initDB } from "../dbUtils"
module.exports = async () => {
await initDB();
}
Global TearDown.ts:
import { closeDB } from "../dbUtils"
module.exports = async () => {
await closeDB();
}
但当我运行测试时,我收到两个主要错误。
Determining test suites to run.../home/me/Projects/.../Table1.ts:1
import { Entity, PrimaryGeneratedColumn, Column, OneToMany, Index, PrimaryColumn, ColumnType, ColumnOptions } from "typeorm";
^^^^^^
SyntaxError: Cannot use import statement outside a module
和
这意味着全局设置功能没有运行。注意:我使用的是TypeORM。
如何正确设置才能正常工作?
编辑:我的initDB函数:
export async function initDB() {
console.log("inside intiDB");
await createConnection().then(async connection => {
console.log("connected to db");
}).catch(error => console.log(error));
}
当我运行测试时,我看到inside initDB
,但没有看到connected to db
。我认为createConnection()查看了我的实体目录,当它到达Table1.ts时,问题就出现了。然后它抱怨
如果我删除了global alSetup和global alTearDown,而只是在我的测试文件中使用bepreAll,毕竟,一切都会正常工作。
推荐答案
在运行global alSetup和global alTeardown时尚未定义类型脚本环境,这就是JEST失败的原因。
解决方法是在这些文件中要求ts-node手动创建环境。
举个例子:
require('ts-node/register');
const setup = (): void => {
// whatever you need to set up globally
};
export default setup;
这篇关于让Jest全局安装和全局拆卸在一个TypeScrip项目中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!