我正在使用赛普拉斯进行端到端测试。在我的beforeEach
中,我使用的是已提供的SDK,用于在服务器上播种数据(SDK将API调用发送到服务器,但内部未使用cy.request
)。 SDK上的方法返回了一个Promise,因此我认为我可以像这样返回Promise:
beforeEach(() => {
return sdk.createProperty(...);
});
然后我的测试执行以下操作:
it('displays a property', () => {
cy.visit(`/companies/${appTestData.companyId}/properties`);
...the rest is commented out currently...
}
这实际上按预期工作,也就是说,它会等到服务器响应返回后再运行测试,但是当测试实际运行时,我会在控制台中看到以下警告:
Cypress Warning: Cypress detected that you returned a promise in a test, but also invoked one or more cy commands inside of that promise...
我注意到,如果我将beforeEach
更改为使用cy.then
,警告就会消失:
beforeEach(() => {
cy.then(() => sdk.createProperty(...));
});
这似乎有点不必要,在黑暗中有点刺伤,所以我想知道是否有规定的方式来做我需要做的事情。我无法更改要用于cy.request
的SDK,我认为这样做也可以防止出现警告。谢谢。
答案 0 :(得分:1)
可能不是您想听到的,但是我可以确认一下,使用cy.then(...)
是我所知道的在赛普拉斯中等待Promise的最标准方法。
在阅读完您的问题后,我尝试使用赛普拉斯的Network Requests功能来等待fetch('my/url')
中的before()
,但似乎根本没有检测到请求。