如何在每次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
相关产品推荐
相关产品推荐

