我试图避免使用global
对象,因为我想使用strict mode
所以我尝试使用全局模块策略:
Browser.js
'use strict';
module.exports = {
instance: null
};
我使用的是Puppeteer,所以我设置了一个合适的环境(example)
setup.js (可以在示例链接上找到完整的设置代码):
const Browser = require("../Browser");
module.exports = async function () {
const browser = await puppeteer.launch();
// store the browser instance so we can teardown it later
Browser.instance = browser;
};
但是,当我进入测试时,浏览器模块实例再次设置为null
,就像模块重新加载一样,即:。
index.test.js
const Browser = require('../Browser');
let page;
beforeAll(async function() {
page = await Browser.instance.newPage(); // Browser.instance = null
});
此外,在测试实际启动之前运行的其他安装文件中,浏览器按预期运行实例:
PuppeteerEnvironment.js
const Browser = require("../Browser");
async setup() {
await super.setup();
// get the wsEndpoint
const wsEndpoint = fs.readFileSync(path.join(DIR, 'wsEndpoint'), 'utf8');
if (!wsEndpoint) {
throw new Error('wsEndpoint not found');
}
console.log(Browser.instance); // print the Browser object as expected
// connect to puppeteer
await puppeteer.connect({
browserWSEndpoint: wsEndpoint,
});
}
我的目标是只有一个易于访问的浏览器实例。