jest-puppeteer не может запустить сервер по https

У меня есть приложение, которое работает с использованием https. Для этого мне нужно настроить среду тестирования e2e.

Если я установлю в jest-puppeteer.config.js опция сервера protocol в 'http' тестовый исполнитель игнорирует сервер, запущенный по адресу https://localhost:3000/ и завершившийся по таймауту без выполнения тестов. Выход

yarn run v1.9.4
$ NODE_ENV=test jest --useStderr --forceExit --runInBand --no-cache --detectOpenHandles --config config/jest/config.e2e.js
Determining test suites to run...
Jest dev-server output:
[Jest Dev server] $ node --max-old-space-size=4096 ./scripts/start.js
[Jest Dev server] NODE_ENV: test
[Jest Dev server] Starting the development server...
[Jest Dev server] start detecting webpack modules cycles
[Jest Dev server] end detecting webpack modules cycles
[Jest Dev server] start detecting webpack modules cycles
[Jest Dev server] end detecting webpack modules cycles
[Jest Dev server] 

Compile done in: 159.054s
[Jest Dev server] Compiled with warnings.
[Jest Dev server] Warning in ./~/ajv/lib/async.js
96:20-33 Critical dependency: the request of a dependency is an expression
    at process._tickCallback (internal/process/next_tick.js:180:9)
Warning in ./~/ajv/lib/async.js
119:15-28 Critical dependency: the request of a dependency is an expression
    at process._tickCallback (internal/process/next_tick.js:180:9)
Warning in ./~/ajv/lib/compile/index.js
13:21-34 Critical dependency: the request of a dependency is an expression
    at process._tickCallback (internal/process/next_tick.js:180:9)
You may use special comments to disable some warnings.
Use // eslint-disable-next-line to ignore the next line.
Use /* eslint-disable */ to ignore all warnings in a file.

Server has taken more than 240000ms to start.

☝️ You can set "server.launchTimeout" in jest-puppeteer.config.js
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Если в jest-puppeteer.config.js Я пропускаю опцию сервера protocol или установите его null исполнитель тестов запускает выполнение тестов сразу после вызова запуска сервера (не дожидаясь запуска приложения). Мое приложение компилируется до 4 минут. Поэтому, чтобы избежать прерывания по таймауту, я удалил ограничение тайм-аута из page.goto и установил тайм-аут теста в 4 минуты. Однако, как только приложение скомпилировано, я получаю net::ERR_SPDY_PROTOCOL_ERROR at https://localhost:3000/login ошибка. Выход

yarn run v1.9.4
$ NODE_ENV=test jest --useStderr --forceExit --runInBand --no-cache --detectOpenHandles --config config/jest/config.e2e.js
Determining test suites to run...
Jest dev-server output:
[Jest Dev server] $ node --max-old-space-size=4096 ./scripts/start.js
[Jest Dev server] NODE_ENV: test
[Jest Dev server] Starting the development server...
[Jest Dev server] start detecting webpack modules cycles
end detecting webpack modules cycles
[Jest Dev server] start detecting webpack modules cycles
[Jest Dev server] end detecting webpack modules cycles
[Jest Dev server] 

Compile done in: 157.259s
 FAIL  tests/e2e/home.test.js (157.404s)
  home page
    ✕ contains a particular text (155336ms)

  ● home page › contains a particular text

    net::ERR_SPDY_PROTOCOL_ERROR at https://localhost:3000/login

      at navigate (node_modules/puppeteer/lib/Page.js:622:37)

Test Suites: 1 failed, 1 total
Tests:       1 failed, 1 total
Snapshots:   0 total
Time:        158.343s
Ran all test suites.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Обратите внимание, что если я использую http (не https) в приложении, в тестовом примере и в jest-puppeteer.config.js все хорошо, т. е. тестовый набор проходит и выполняется после запуска приложения, но мне нужно использовать https.

Прецедент

/*global TimeoutLength windowSize*/
import puppeteer from 'puppeteer';
import expect from 'expect-puppeteer';

describe('home page', () => {
  let browser;
  let page;

  beforeAll(async () => {
    jest.setTimeout(TimeoutLength);

    browser = await puppeteer.launch({
      headless: false,
      args: [`--window-size=${windowSize.width},${windowSize.height}`],
      ignoreHTTPSErrors: true
    });
    page = await browser.newPage();
    await page.setViewport(windowSize);
  });

  it('contains a particular text', async () => {
    await page.goto('https://localhost:3000/login', {
      timeout: 0
    });
    await expect(page).toMatch('My Accounts');
  }, TimeoutLength);

  afterAll(() => {
    browser.close();
  });
});

Шутка-puppeteer.config.js

module.exports = {
  server: {
    command: 'NODE_ENV=test yarn start',
    debug: true,
    launchTimeout: 240000,
    port: 3000,
    protocol: 'http',//or skipped i.e. protocol: null
    usedPortAction: 'kill'
  }
};

Jest config

module.exports = {
  rootDir: '../..',
  testURL: 'http://localhost',
  setupFiles: [
    '<rootDir>/config/jest/setup.js'
  ],
  transform: {
    '^.+\\.(js|jsx)?$': '<rootDir>/config/jest/transform.js'
  },
  moduleDirectories: [
    'node_modules',
    'src'
  ],
  globals: {
    TimeoutLength: 240000,
    windowSize: {
      width: 1200,
      height: 900
    }
  },
  verbose: true,
  preset: 'jest-puppeteer',
  setupTestFrameworkScriptFile: 'expect-puppeteer',
  testRegex: '.*\\.(test)\\.js$',
  testPathIgnorePatterns: [
    'config/babel.test.js'
  ]
};

0 ответов

Другие вопросы по тегам