Я пытаюсь найти способ настроить браузер для Puppeteer один раз, чтобы мне не приходилось делать это для каждого теста. В настоящее время это структура, с которой я работаю: jest.config. js
process.env.BROWSER_PATH='<PATH_TO_CHROME>/chrome.exe';
module.exports = {
preset: "jest-puppeteer",
globals: {
URL: "http:localhost:3000",
HEADLESS: (process.env.NODE_ENV==='development' ||
process.env.NODE_ENV==='production'
? true : false
)
},
testMatch: [
"**/test/**/*.test.js"
],
verbose: true
}
jest-puppeteer.config. js
module.exports = {
launch: {
headless: HEADLESS,
slwoMo: process.env.SLOWMO ? process.env.SLOWMO : 0,
devtools: false,
executablePath: process.env.BROWSER_PATH,
}
}
browserTest. js
describe('Browser Test', () => {
// This test has 2 asserts
test('Browser Popup: successful', async () => {
console.log("[BrowserTest] headless:", HEADLESS);
try {
const browser = await puppeteer.launch({
// headless: process.env.HEADLESS == 'true'? true:false,
// executablePath: process.env.BROWSER_PATH,
isMobile: false,
});
const page = await browser.newPage();
await page.goto(URL, {
waitUntil: 'domcontentloaded'
});
page.once('load', () => console.log('[BrowserPopup] Page loaded!'));
await new Promise(resolve => setTimeout(resolve, 7500));
await browser.close();
} catch (e) {
console.log('Err: ', e);
}
}, timeout);
});
Идея в том, что если у меня есть headless и executetablePath в конфигурациях запуска (в jest-puppeteer.config. js), то не должен ли кукловод забрать его оттуда? Почему я должен повторно объявить его при запуске браузера в моем тестовом примере?
Альтернатива, о которой я подумал, состояла в том, что если я не могу этого сделать, то я хочу иметь возможность реплицировать это поведение в процессе .env.HEADLESS, как показано в первой строке jest.config. js. Я бы удалил его из объявления глобалов в файле конфигурации. Этот метод тоже не работает.
Вопрос: Есть ли какое-то особенное место, где я мог бы поставить это, чтобы мне не приходилось повторять это? Состояние HEADLESS зависит от среды, в которой оно выполняется.
Примечание. В настоящее время выдается ошибка, поскольку jest-puppeteer.config. js не может видеть файл jest.config. js. Таким образом, это ошибка «HEADLESS не определен». После исправления выдает еще одну ошибку, которая Chrome не была определена. Поэтому мне пришлось добавить это в параметры puppeteer.launch ({}). Это заставляет меня поверить, что jest-puppeteer. js на самом деле ничего не делает, поскольку не может видеть безголовый или executetablePath.
Примечание: я запускаю тесты, используя jest --config = jest. конфигурации. js. Это работает, потому что я могу использовать глобальную переменную в успешном тестовом прогоне. Спасибо за помощь!