cypress - Cy.request() 无故超时
问题描述
我目前正在使用 cypress 测试应用程序。这个应用程序有一个后端(API)和一个前端。Cypress 用于测试前端。
在开始测试之前,我们初始化后端的数据库,使其处于测试所需的状态。我们通过向后端发送直接请求来实现这一点,使用cy.request()
.
这是 cypress 中的请求之一的代码(这个是有问题的):
Cypress.Commands.add("assignCityToTerritory", (territory, cityId) => {
return cy.request({
method: 'POST',
url: Cypress.env('apiUrl') + '/territories/' + territory.id + '/city-assignment',
headers: {
Authorization: 'Bearer ' + window.localStorage.getItem('jwt')
},
body: {
city: {
id: cityId
}
}
}).then(response => {
return response
})
})
问题来了:
- 如果我的后端在本地运行并且我的前端连接到我的本地后端,那么这可以正常工作。
- 如果我使用完全相同版本的后端但在远程服务器上,则
cy.request()
超时并说它永远不会从服务器收到任何答复 - 在同一个测试中,
cy.request()
对远程后端的其他调用在有问题的调用之前工作正常。比如这个:
Cypress.Commands.add("create", (itemType, itemData) => {
cy.log("# Creating " + itemType)
return cy.request({
method: 'POST',
url: Cypress.env('apiUrl') + '/' + itemType + '/',
headers: {
Authorization: 'Bearer ' + window.localStorage.getItem('jwt')
},
body: itemData
}).then(response => {
return response
})
})
- 完全相同的请求(相同的 URL、相同的方法、相同的负载)通过邮递员发送到远程后端时效果很好,并且后端几乎立即响应。
- 即使赛普拉斯没有从遥远的后端得到答案,但说后端确实执行并回答了赛普拉斯的请求。看起来确实出于某种原因,赛普拉斯不知道响应。
结论:我不知道为什么这个特定cy.request()
的超时
解决方案
猜测:第二个请求是否返回标头Location: something.external
?正如这个 GH 评论所说:
在对我试图访问的 url 进行一些网络跟踪后,我注意到该页面试图加载不同的域。因为 cypress 不允许这样做,所以请求会在两分钟后超时,
推荐阅读
- fasttext - fastText -autotune-validation 不起作用
- apache-spark - 为什么Spark在一个阶段后从文件中读取速度如此之快?
- angular - 为什么浏览器对 OPTION 请求得到 200 响应和 503 响应?
- python - Keras,使用 y_pred y_true 的不同属性最大化自定义损失
- html - 我正在尝试更改我网站上的字体,但无论我尝试什么都行不通
- c++11 - 如何将可变参数模板参数分配给 std::array
- postgresql - PostgreSQL 没有复制一些更改(扩展)
- pytorch - Pytorch 中是否有一种方法可以以可以反向传播的方式计算唯一值的数量?
- amazon-web-services - 自动为所有 AWS 账户创建相同的策略
- android - 无法从 Android PUT 到 DJANGO REST