让 Jest 全局设置和全局拆卸在 TypeScript 项目中工作

2024-05-23

我想运行一个在运行测试之前打开数据库连接的函数(全局设置),以及另一个在运行测试后关闭数据库连接的函数(全局拆卸)。目前我有以下配置:

包.json:

//...
"jest": {
    "testEnvironment": "node",
    "globalSetup": "./src/jest/globalSetUp.ts",
    "globalTeardown": "./src/jest/globalTearDown.ts",
    "moduleFileExtensions": [
      "js",
      "ts"
    ],
    "transform": {
      "\\.(ts|tsx)$": "ts-jest"
    }
  }

和我的 globalSetUp.ts:

import { initDB } from "../dbUtils"

module.exports = async () => {
  await initDB();
}

全局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

and

CannotExecuteNotConnectedError:无法对“默认”执行操作 连接,因为连接尚未建立。

这意味着全局设置功能未运行。注意我正在使用 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 时问题就会出现。然后它抱怨说

导入{实体,PrimaryGenerateColumn,列,OneToMany,索引, PrimaryColumn, ColumnType, ColumnOptions } 来自“typeorm”; ^^^^^^

SyntaxError: Cannot use import statement outside a module

如果我删除 globalSetup 和 globalTearDown ,而只是在测试文件中使用 beforeAll 和 afterAll ,那么一切都会正常。


当以下情况时,打字稿环境尚未定义全局设置 and 全局拆解正在运行,这就是笑话失败的原因。

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

这是一个例子:

require('ts-node/register');

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

export default setup;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

让 Jest 全局设置和全局拆卸在 TypeScript 项目中工作 的相关文章

随机推荐

  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 拟合具有扭曲时基的正弦波

    我想知道在 Matlab 中拟合具有扭曲时基的正弦波的最佳方法 时间失真由 n 阶多项式 n 10 给出 其形式为t distort P t 例如 考虑失真t distort 8 12t 6t 2 t 3 这只是幂级数展开 t 2 3 这将
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • 无法加载身份验证插件“caching_sha2_password”

    我正在将 MySQL 8 0 与 MySQL Workbench 连接并收到以下错误 无法加载身份验证插件 caching sha2 password dlopen usr local mysql lib plugin caching sh
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • 当 mov 指令导致页面错误并且在 x86 上禁用中断时会发生什么?

    我最近在自定义 Linux 内核 2 6 31 5 x86 驱动程序中遇到一个问题 其中 copy to user 会定期不将任何字节复制到用户空间 它将返回传递给它的字节数 表明它没有复制任何内容 经过代码检查 我们发现代码在调用 cop
  • 包恢复失败。回滚包更改 - Serilog.AspNetCore

    我有一个 asp net Core 项目 我正在尝试向其中添加一个记录器 我选择了我在其他项目中使用过的 SeriLog 但是当我尝试添加 Serilog AspNetCore 我得到的软件包版本 2 0 0 包恢复失败 回滚 后端 的包更
  • PouchDB - 手动管理冲突

    是否可以从客户端管理同步冲突 我的意思是 当 pouchDB 进行同步并检测到冲突时 是否可以获取 PouchDB 尝试同步的本地文档和 CouchDB 文档的最新版本 如果我可以获得这两个文档 我可以将它们显示给用户 他可以选择保留哪个版
  • 为什么某些安装程序需要在运行程序之前重新启动计算机?

    我对部署桌面应用程序相当陌生 所以这是我第一次为我的软件构建安装程序 目前 我安装软件后第一次运行它时 它崩溃了 之后 它运行良好 我仍在调试此问题 但我注意到在安装后和运行软件之前立即重新启动似乎可以修复此崩溃 某些安装程序要求您在运行软
  • ASP.NET MVC - 用于管理的区域还是单独的 Web 应用程序?

    到目前为止我一直在使用MVC Area为了行政我的 mvc 应用程序的一部分 但最近我开始重新思考这个问题由于每个应用程序不能有多个表单身份验证配置 这已经成为一个问题 因为在最近的一个项目中 我想将身份验证 cookie 设置为不会对用户
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 独立 JBoss EJB 客户端应用程序 - 如何获取 JNDI 连接 - “独特名称”

    关于从独立应用程序远程访问 JBoss EJB 存在大量令人沮丧的不正确 更好的描述 关闭但没有雪茄 信息 我已经把头撞在墙上一天多了 但没有成功 我正在尝试将 EJB 从 WebLogic 移植到 JBoss 它由另一台服务器上运行的独立
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • Paste.httpserver 并通过 HTTP/1.1 Keep-alive 减慢速度;使用 httperf 和 ab 进行测试

    我有一个基于paste httpserver 的Web 服务器作为HTTP 和WSGI 之间的适配器 当我使用 httperf 进行性能测量时 如果每次使用 num conn 启动一个新请求 我每秒可以执行超过 1 000 个请求 如果我使
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • 让 Jest 全局设置和全局拆卸在 TypeScript 项目中工作

    我想运行一个在运行测试之前打开数据库连接的函数 全局设置 以及另一个在运行测试后关闭数据库连接的函数 全局拆卸 目前我有以下配置 包 json jest testEnvironment node globalSetup src jest g