首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调试运行在testcafe/testcafe docker容器中的Testcafe浏览器?

如何调试运行在testcafe/testcafe docker容器中的Testcafe浏览器?
EN

Stack Overflow用户
提问于 2019-04-04 04:04:38
回答 2查看 956关注 0票数 4

在Page类中对React应用的登录函数进行了测试:

代码语言:javascript
复制
  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... 

以及测试,该测试在本地运行时通过,但在容器中失败

代码语言:javascript
复制
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

不出所料,process 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

我正在使用的容器是否有一些我没有意识到的限制?我之前调试过在Docker容器中运行的Node进程,我知道这是可以做到的。但那是不久前的事了。我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-04 22:14:37

您可以使用NODE_OPTIONS环境变量来启用远程调试:

代码语言:javascript
复制
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并导航到在devtoolsFrontendUrl属性中指定的DevTools URL。

否则,使用docker-machine ip命令获取Docker的IP地址,并打开http://${DOCKER_MACHINE_IP}:9229/json以获取DevTools URL。

票数 3
EN

Stack Overflow用户

发布于 2019-04-04 04:08:52

在Mac上进行开发的可能性很小,一种可能是您需要将主机指定为host.docker.internal而不是127.0.0.1,以便使主机上正在运行的服务对容器可见。这可能是本地和集装箱化测试运行之间的差异之一。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55503435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档