【问题标题】:Cypress (Electron) error on OpenShift "Failed to get 'appData' path" during End-to-end tests端到端测试期间 OpenShift 上的赛普拉斯(电子)错误“无法获取 'appData' 路径”
【发布时间】:2019-11-29 17:54:00
【问题描述】:

我尝试在 OpenShift 中运行 cypress 端到端测试。在本地它可以工作,但在 OpenShift 中通过 cypress run 命令启动测试后会发生错误。

OpenShift 中的错误消息

> kfuvo-sfa-e2e@0.0.1 cypress-run /e2e  
    A JavaScript error occurred in the main process
    Uncaught Exception:
    Error: Failed to get 'appData' path
        at App.app._setDefaultAppPaths (/e2e/cypress-cache/3.6.0/Cypress/resources/electron.asar/browser/api/app.js:51:41)
        at Object.<anonymous> (/e2e/cypress-cache/3.6.0/Cypress/resources/electron.asar/browser/init.js:147:5)
        at Module._compile (internal/modules/cjs/loader.js:839:30)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:851:10)
        at Module.load (internal/modules/cjs/loader.js:701:32)
        at tryModuleLoad (internal/modules/cjs/loader.js:633:12)
        at Function.Module._load (internal/modules/cjs/loader.js:625:3)
        at Function.Module.runMain (internal/modules/cjs/loader.js:904:10)
        at internal/main/run_main_module.js:24:11

如果我尝试在 docker 映像构建期间运行测试 (RUN npm run cypress-run),一切正常。 cypress-run npm 脚本只是“cypress run”的快捷方式。 如果我在容器启动后尝试运行测试,则会出现错误 (ENTRYPOINT ["/usr/local/bin/npm", "run", "cypress-run"])。

它发生在 cypress 实现的电子部分。我认为问题是,docker 镜像构建是由 root 用户执行的。容器将由不同的用户启动。似乎电子在 cypress 安装期间将 appData 路径设置为 root 用户的目录。稍后启动容器并运行测试的用户无法访问此 appData 文件夹。

我对电子不是很熟悉。也许有人知道如何强制电子在其他地方创建这个 appData 文件夹?

【问题讨论】:

  • 你能解决你的问题吗?
  • 你能解决这个问题吗?

标签: docker npm electron openshift cypress


【解决方案1】:

您还可以将appData 路径设置为用户可以通过环境变量XDG_CONFIG_HOME 控制的目录。

(来源:electron documentation for app.getPath

【讨论】:

    【解决方案2】:

    我找到了两种解决方案:

    1) 用电子浏览器运行cypress:

    在 dockerfile 中,我用修改后的版本替换了 electron.asar

    RUN rm -f /e2e/cypress-cache/3.6.0/Cypress/resources/electron.asar
    COPY custom-electron-version/electron.asar /e2e/cypress-cache/3.6.0/Cypress/resources/
    

    在修改后的 electron.asar 中,初始 js 文件中的 appData 路径已更改:app.setPath("appData", 'customPath')

    这不是一个干净的解决方案,每次更新都会出现问题!

    2) 用 chrome 浏览器运行 cypress

    更好的办法就是把浏览器换成chrome:

    cypress run --browser chrome
    

    使用 chrome,一切都按预期工作,没有肮脏的解决方法:)

    【讨论】:

    • 我遇到了同样的问题,我尝试了第二个解决方案,但仍然遇到同样的错误。
    • 如果您使用 chrome 作为浏览器,就不会再出现电子错误了。 @itgeek 你确定 chrome 真的被用作浏览器吗?
    【解决方案3】:

    在 cypress 的 openshift 部署中设置以下环境变量对我有用。

    • XDG_CONFIG_HOME=/test
      • /test 应该包含 cypress.json 文件
    • CYPRESS_PORT=8080

    在手动将XDG_CONFIG_HOME 设置为/test 后,我在终端中运行cypress run 发现了CYPRESS_PORT 问题(即我在终端中运行export XDG_CONFIG_HOME=/test)并收到以下错误。

    We found an invalid configuration value:
    
    Expected `port` to be a number. Instead the value was: `"tcp://10.201.209.161:8080"`
    

    然后我运行cypress info 并查找设置为tcp://10.201.209.161:8080 的环境变量。

    Environment Variables:
    CYPRESS_SERVICE_HOST: 10.201.209.161
    CYPRESS_PORT_8080_TCP_ADDR: 10.201.209.161
    CYPRESS_PORT_8080_TCP_PORT: 8080
    CYPRESS_PORT_8080_TCP_PROTO: tcp
    CYPRESS_SERVICE_PORT: 8080
    CYPRESS_PORT: tcp://10.201.209.161:8080         <----------
    CYPRESS_SERVICE_PORT_8080_TCP: 8080
    CYPRESS_PORT_8080_TCP: tcp://10.201.209.161:8080
    CYPRESS_CACHE_FOLDER: /root/.cache/Cypress
    

    然后我尝试运行export CYPRESS_PORT=8080,然后运行cypress run,它成功了!

    【讨论】:

      猜你喜欢
      • 2020-12-23
      • 2020-06-02
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2023-02-14
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多