柏树测试偶尔失败
几天来,我们一直在调试失败的 Cypress 测试,但似乎无法缩小原因范围。测试在我们的 GitLab CICD 管道中运行。
我们在日志中看到的错误:
Uncaught (in promise): TypeError: Cannot convert undefined or null to object\nTypeError: Cannot convert undefined or null to object\n at Function.keys ()\n at MapSubscriber.project (http://localhost:49152/main.2e49092b1a3db7b9c078.js:8506:28)\n at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next ...
我们添加了一个 Cypress 插件,如果任何测试失败,则重新运行它们,并且它总是第二次通过。每次失败的测试并不相同,而是各不相同。失败似乎是因为页面由于上述错误而无法呈现,但不清楚该错误来自何处。
我们注意到测试在 Firefox 中通过,因此我们只会在基于无头 chrome/chromium 的浏览器中看到此错误。
有什么想法可以让我们查看以找出问题所在?
在为我们的前端向 Cypress 添加日志记录包后,我们能够获得更有用的错误。
error (network): Failed to load resource: net::ERR_INSUFFICIENT_RESOURCES
我们的问题原来是 Cypress 的一个未解决的问题,Chrome 占用了太多内存并导致 Docker 崩溃。
问题和解决方案发布在此处: https://github.com/cypress-io/cypress/issues/7457
Follow https://docs.cypress.io/guides/guides/continuous-integration.html#In-Docker and then setting --ipc=host on our docker containers [will] stop the issue.
经过一番挖掘,向 chrome 添加
--disable-dev-shm-usage
标志解决了这个问题。您可以使用
--ipc=host
,但不使用它隔离效果会更好。
我在 Docker 中遇到了 Karma 和 Chrome >= 90 的相同问题。