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

OpenShift中的错误消息

> [email protected] 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”] )。

它发生在柏树的 Electron 部分。我认为问题是,docker镜像构建是由root用户执行的。该容器将由其他用户启动。似乎 Electron 在cypress安装过程中将appData路径设置为root用户的目录。稍后,启动容器并运行测试的用户将无法访问此appData文件夹。

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

最佳答案

我找到了解决该问题的两种解决方案:

1)使用 Electron 浏览器运行cypress:

在dockerfile中,我用修改后的版本替换了electronic.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,一切正常,没有肮脏的解决方法:)

关于docker - 端到端测试期间,OpenShift “Failed to get ' appData的“路径”上的 Cypress ( Electron )错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59109247/

10-11 20:58