我尝试在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/