Я пытаюсь избежать использования global
объекта, потому что я хочу использовать strict mode
, поэтому я пытаюсь использовать глобальную стратегию модуля:
Browser.js
'use strict';
module.exports = {
instance: null
};
Я использую Puppeteer, поэтому настраиваю подходящую среду ( пример )
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,
});
}
Моя цель - иметь только один экземпляр браузера, к которому будет легко получить доступ.