Установка и доступ к переменным среды в Jest и Puppeteer - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь найти способ настроить браузер для 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. Это работает, потому что я могу использовать глобальную переменную в успешном тестовом прогоне. Спасибо за помощь!

...