Как отладить браузер Testcafe, работающий в Docker-контейнере testcafe / testcafe? - PullRequest
3 голосов
/ 03 апреля 2019

Получен тест для функции входа в приложение React в классе Page:

  async login(t) {
    console.log('starting login...');
    debugger;
    this.logBrowserMessages(t);

    await this.loginModal({ visibilityCheck: true });
    await t
      .expect(this.loginModal.visible)
      .ok()
    // then log the user in etc... 

И тест, который проходит при локальном запуске, но не работает в контейнере

test.requestHooks(mock)('user can log in', async t => {

  await page.login(t);

  // Make sure test user's orders render.
  await t.expect(page.orders.childNodeCount).gt(1, { timeout: 10000 });

Тест проходит локально, но не проходит (логин не работает) при запуске в контейнере.

Когда я запускаю тест локально, он отлаживается, как и ожидалось:

testcafe chrome --inspect-brk=9230 ./tests/login.test.js --skip-js-errors

Процесс node_modules/testcafe/lib/cli отображается в моем chrome://inspect/#devices, как и ожидалось.

Однако, когда я запускаю testcafe в Docker-контейнере testcafe, он не будет отлаживаться ни с одной из следующих команд:

docker run --expose 9230 -p 9230:9230 -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=0.0.0.0:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=0.0.0.0:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' --inspect-brk=127.0.0.1:9230 -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe --inspect-brk=0.0.0.0:9230 --browsers 'chromium --no-sandbox' -S -s '/screenshots' --skip-js-errors /tests/**/login.test.js

docker run --expose 9230 -p 9230:9230 -e \"NODE_PATH=/opt:/opt/testcafe/node_modules:/tests/node_modules\" -e BASIC_AUTH_USER -e BASIC_AUTH_PASS -e NODE_ENV=docker -e TEST_USER -e TEST_PASS --shm-size=1gb -v `pwd`:/tests -v `pwd`/screenshots/docker:/screenshots testcafe/testcafe 'chromium --no-sandbox' -S -s '/screenshots' --skip-js-errors --inspect-brk=9230 /tests/**/login.test.js

Есть ли какое-то ограничение на контейнер, который я использую, о котором я не знаю?Я ранее отлаживал процессы Node, работающие в контейнерах Docker, я знаю, что это можно сделать.Но это было некоторое время назад.Я что-то пропустил?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Вы можете использовать переменную окружения NODE_OPTIONS, чтобы включить удаленную отладку:

docker run -it --rm -p 9229:9229 -e NODE_OPTIONS="--inspect-brk=0.0.0.0:9229" -v /host/path/to/tests:/tests testcafe/testcafe 'chromium --no-sandbox' /tests/test.js

Если вы не используете docker-machine, вы можете открыть http://localhost:9229/json в браузере и перейти к DevToolsURL-адрес, указанный в свойстве devtoolsFrontendUrl.

В противном случае используйте команду docker-machine ip, чтобы получить IP-адрес виртуальной машины Docker, и откройте http://${DOCKER_MACHINE_IP}:9229/json, чтобы получить URL-адрес DevTools.

1 голос
/ 03 апреля 2019

В случае непредвиденной ситуации, когда вы разрабатываете на Mac, одна из возможностей заключается в том, что вам нужно указать хост как host.docker.internal, а не 127.0.0.1, чтобы запущенные службы на хосте были видны контейнеру. Это может быть одним из расхождений между локальным и контейнерным прогонами теста.

https://docs.docker.com/docker-for-mac/networking/

...