本文介绍了让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 alSetupglobal alTeardown时尚未定义类型脚本环境,这就是JEST失败的原因。

解决方法是在这些文件中要求ts-node手动创建环境。

举个例子:

require('ts-node/register');

const setup = (): void => {
  // whatever you need to set up globally
};

export default setup;

这篇关于让Jest全局安装和全局拆卸在一个TypeScrip项目中工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 22:46