Node.js 设置后重新加载/重置模块

Node.js 设置后重新加载/重置模块,node.js,jestjs,puppeteer,Node.js,Jestjs,Puppeteer,我试图避免使用全局对象,因为我想使用严格模式,所以我尝试使用全局模块策略: Browser.js “严格使用”; module.exports={ 实例:null }; 我正在使用木偶演员,所以我正在设置一个合适的环境() setup.js(完整的设置代码可在示例链接中找到): const Browser=require(“../Browser”); module.exports=异步函数(){ const browser=wait puppeter.launch(); //存储浏览器实例,

我试图避免使用
全局
对象,因为我想使用
严格模式
,所以我尝试使用全局模块策略:

Browser.js

“严格使用”;
module.exports={
实例:null
};
我正在使用木偶演员,所以我正在设置一个合适的环境()

setup.js(完整的设置代码可在示例链接中找到):

const Browser=require(“../Browser”);
module.exports=异步函数(){
const browser=wait puppeter.launch();
//存储浏览器实例,以便以后可以将其拆下
Browser.instance=浏览器;
};
但是,当我进入测试时,浏览器模块实例再次设置为
null
,就好像模块再次重新加载ie:

index.test.js

const Browser=require('../Browser');
让页面;
beforeAll(异步函数(){
page=wait Browser.instance.newPage();//Browser.instance=null
});
此外,在测试实际启动之前运行的其他安装文件中,浏览器具有预期的实例:

puppeterenvironment.js

const Browser=require(“../Browser”);
异步设置(){
等待super.setup();
//获取wsEndpoint
const wsEndpoint=fs.readFileSync(path.join(DIR,'wsEndpoint'),'utf8');
如果(!wsEndpoint){
抛出新错误('wsEndpoint not found');
}
console.log(Browser.instance);//按预期打印浏览器对象
//连接到木偶演员
等待木偶师({
browserWSEndpoint:wsEndpoint,
});
}

我的目标是只有一个易于访问的浏览器实例。

您的
setup.js
导出方法不会将任何内容写入某种全局对象,也不会
返回任何内容。在示例链接中,设置了一些全局变量。尝试返回某些内容或debigg/console.log setup.js,查看它是否在启动测试/每个测试期间执行。谢谢,全局对象是
Browser
module。
setup.js
jest
启动时执行一次(而不是在每次测试之前)。另外,
Browser
对象更新反映在
puppeterenvironment.js
Broswer
/Browser
模块导出的东西中,而不是全局对象。好吧,节点确实会加载/运行它一次,然后当您
需要
时,它会返回相同的单例对象,就像从缓存返回的一样。因此,如果您修改它,它将反映在所有地方。我知道这一点,它也可以工作(在
puppeterenvironment.js
),但我认为
Jest
测试在隔离环境或类似的环境中运行。所以请使用