我尝试在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-runnpm脚本只是“cypress run”的快捷方式。如果我在容器启动后尝试运行测试(ENTRYPOINT ["/usr/local/bin/npm”,“run”,“cypress-run”]),则会发生错误。
它发生在Cypress实现的电子部分。我认为问题在于,Docker镜像构建是由root用户执行的。该容器将由其他用户启动。似乎electron在安装cypress期间将appData路径设置为root用户的目录。稍后,正在启动容器并运行测试的用户将无法访问此appData文件夹。
我对电子不是很熟悉。也许有人知道如何迫使电子创建这个appData文件夹在其他地方?
4条答案
按热度按时间lnxxn5zx1#
您还可以将
appData
路径设置为用户可以通过环境变量XDG_CONFIG_HOME
控制的目录。(来源:
app.getPath
的电子文档)hwamh0ep2#
我找到了两个解决问题的方法:
1)使用电子浏览器运行cypress:
在dockerfile中,我将electron.asar替换为修改后的版本
在修改后的electron.asar中,在初始化的js文件中更改了appData路径:
app.setPath("appData", 'customPath')
它不是一个干净的解决方案和一个问题,对每一个更新!
2)在Chrome浏览器中运行cypress
更好的解决方案是将浏览器更改为Chrome:
有了Chrome,一切都能按预期工作,没有肮脏的变通方法:)
nhn9ugyo3#
在cypress的openshift部署上设置以下环境变量对我来说很有用。
XDG_CONFIG_HOME=/test
/test
应包含cypress.json
文件CYPRESS_PORT=8080
我发现了
CYPRESS_PORT
问题,在手动将XDG_CONFIG_HOME
设置为/test
后,在终端中运行cypress run
。我在终端运行export XDG_CONFIG_HOME=/test
)并得到以下错误。然后运行
cypress info
并查找设置为tcp://10.201.209.161:8080
的环境变量。然后我试着运行
export CYPRESS_PORT=8080
,然后运行cypress run
,它工作了!mspsb9vt4#
在我的例子中,当我试图切换到
user
而不是root
时,出现了这个问题。因此,Electron试图获取home
文件夹的路径。简单地添加一个新用户并没有帮助。在我添加了主目录后,它开始工作了。