You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在每次Jest测试后重置赋值给const的类实例?

解决Jest测试中重置const声明的类实例问题

你遇到的问题是因为const声明的变量是只读的,无法直接重新赋值。下面是几种可行的解决方式:

方法一:将const改为let

这是最直接的方案,把原文件里的const换成let,这样就能在测试中重新赋值了:

main.ts

class MyClass {
  // 你的类属性和方法
}

export let myClass = new MyClass();

测试文件

import { myClass } from './main';
import { MyClass } from './main';

afterEach(() => {
  myClass = new MyClass();
});

方法二:用对象包裹实例(保留const)

如果不想修改原变量的const声明,可以把实例放在一个对象的属性里。因为const只限制对象本身不能被重新赋值,但对象的属性是可以修改的:

main.ts

class MyClass {
  // 你的类属性和方法
}

export const myClassWrapper = {
  instance: new MyClass()
};

测试文件

import { myClassWrapper } from './main';
import { MyClass } from './main';

afterEach(() => {
  myClassWrapper.instance = new MyClass();
});

之后在业务代码里,通过myClassWrapper.instance来访问实例即可。

方法三:封装实例的获取与重置函数

这种方式更优雅,把实例的访问和重置逻辑封装起来,避免直接暴露变量:

main.ts

class MyClass {
  // 你的类属性和方法
}

// 内部维护实例
let _myInstance = new MyClass();

// 提供外部获取实例的方法
export function getMyClassInstance() {
  return _myInstance;
}

// 提供重置方法
export function resetMyClassInstance() {
  _myInstance = new MyClass();
}

测试文件

import { resetMyClassInstance } from './main';

afterEach(() => {
  resetMyClassInstance();
});

业务代码里通过getMyClassInstance()获取实例,测试时调用重置函数即可。

内容的提问来源于stack exchange,提问作者nicoxify

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:24:57