Docker compose 在CircleCI,无论发生什么情况,第一次柏树测试总是失败

Docker compose 在CircleCI,无论发生什么情况,第一次柏树测试总是失败,docker-compose,continuous-integration,cypress,circleci,Docker Compose,Continuous Integration,Cypress,Circleci,我有一个CircleCI配置,在其中我运行机器执行器,使用docker compose启动我的应用程序,然后在Cypress中针对该应用程序运行E2E测试,这些测试不在docker中。Cypress基本上会启动一个无头浏览器,并尝试点击指定的url 现在,无论我的第一次测试是什么,我总是失败。我已经创建了10个测试,只需点击根url并单击一个按钮。我先运行这些测试。第一个总是失败 错误是 CypressError: cy.visit() failed trying to load: http:

我有一个CircleCI配置,在其中我运行机器执行器,使用docker compose启动我的应用程序,然后在Cypress中针对该应用程序运行E2E测试,这些测试不在docker中。Cypress基本上会启动一个无头浏览器,并尝试点击指定的url

现在,无论我的第一次测试是什么,我总是失败。我已经创建了10个测试,只需点击根url并单击一个按钮。我先运行这些测试。第一个总是失败

错误是

CypressError: cy.visit() failed trying to load:

http://localhost:3000/
这基本上意味着没有反应或是4-500

我觉得这个应用程序可能还没有准备好,所以我在开始测试之前添加了睡眠。我将其设置为9分钟(CircleCI上超时10分钟)。第一次测试失败。我把时间缩短到2分钟。第一次测试失败

再次明确,前10个测试是相同的,因此它不是特定于测试的

更新
我有。

我想你的服务器还没有准备好

在运行cypress测试之前,您必须等待服务器

如果是这样,不要使用睡眠。 您可以使用等待或启动服务器并进行测试。
你可以查一下这个文件

所以蒋TJ的回答很接近。不幸的是,“等待”对CircleCI不起作用

所以我写了我自己的

timeout 540 bash-c'while[$(curl-s-o/dev/null-w%{http_-code}localhost:3000)!=“200”];睡15分钟;完成“| |错误

这将每隔15秒ping一次url,持续9分钟,直到收到http状态码200或退出

具体地说,我编写了一个使用上面那一行的Makefile目标,我不知道如何将它粘贴到config.yml中

因此,在运行cypress测试之前,将此作为一个步骤来运行实际上会使所有5个相同的测试都通过


现在它发出大约3 1/2分钟的ping声,然后通过。我用睡眠测试了9分钟,结果总是一样的。所以我不知道为什么这比睡眠更有效,但它确实有效。

我也有同样的问题。通过服务器/路由/等待解决了此问题。我首先启动服务器,然后创建路由别名,等待它调用Api端点(触发应用程序填充dom),然后执行其余操作(cy.get/click)

之前的示例:

cy.get('myCssSelector')
服务器/路由/等待后:

cy.server()
cy.route('GET', '*/project/*').as('getProject')

cy.wait('@getProject')
   .then(resp => {
     expect(resp.status).to.eq(201)
   })

cy.get('myCssSelector')


在多个位置发布问题时,请将每个问题链接到所有其他问题。这将帮助读者评估您是否已经收到答案,从而在您不再需要帮助的情况下节省他们的时间。感谢您的回复。我强烈怀疑这不是因为服务器没有准备好,因为正如我所描述的,只有一个测试在2分钟时失败,只有一个测试在9分钟时失败。尽管如此,我还是会尝试等待,因为这可能会让系统做出反应。我会继续向大家发帖,所以“wait on”似乎对数组或对象使用了扩展语法,错误并没有说明这一点,我猜circleci没有使用足够晚的node版本,或者wait on发布了一个实际上需要巴别塔的模块,这将非常糟糕。在这两种情况下,这都不起作用。