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
测试在隔离环境或类似的环境中运行。所以请使用