我有一个赛普拉斯规格,要在我的站点上测试一个功能,该功能会轮询第三方API,直到接收到正确的答案,然后向用户显示更多信息以继续使用该功能。
我的规格开始于
cy.server();
cy.route('GET', '**/that-other-api/**').as('otherApi');
我知道这部分有效。路由在赛普拉斯测试GUI的顶部列出,并且我的otherApi
别名在运行时在命令列表中列出时附加到XHR请求。
当用户(或我的测试)单击按钮时,站点将开始轮询该端点。当我在响应中收到status: success
时,将为用户(或我的测试)提供选项的填充下拉列表,并且可以继续。
如何让赛普拉斯等到从XHR请求获得特定响应(或达到赛普拉斯超时),然后继续下去?
Network request documentation没有解释这是否可行。我尝试过
cy.wait('@billectaAccounts').should('have.property', 'response.body.status', 'success');
只是看看东西是否有效
cy.wait('@billectaAccounts').should('have.property', 'status', 201);
都抛出错误:
InvalidStateError:无法从“ XMLHttpRequest”读取“ responseText”属性:仅当对象的“ responseType”为“”或“ text”(为“ json”)时,该值才可访问。
记录响应
cy.wait('@billectaAccounts').then(console.log);
记录响应并显示我的状态变量在那儿,但是它是pending
,因为它仅在第一个请求上出现。
{
"xhr": {
"method": "GET",
"url": "https://myapi/longToken",
"id": "xhr193"
},
"id": "xhr193",
"url": "https://myapi/longToken",
"method": "GET",
"status": 200,
"statusMessage": "200 (OK)",
"request": {
"headers": {
"Accept": "application/json, text/plain, */*"
},
"body": null
},
"response": {
"headers": {
"cache-control": "max-age=0, private, must-revalidate",
"connection": "close",
"content-type": "application/json; charset=utf-8",
"date": "Tue, 24 Mar 2020 08:32:09 GMT",
"etag": "W/\"f0d6999f3be78c3dc8eab419745ec489\"",
"referrer-policy": "strict-origin-when-cross-origin",
"server": "Cowboy",
"vary": "Origin",
"via": "1.1 vegur",
"x-content-type-options": "nosniff",
"x-download-options": "noopen",
"x-frame-options": "SAMEORIGIN",
"x-permitted-cross-domain-policies": "none",
"x-request-id": "id",
"x-runtime": "0.006788",
"x-xss-protection": "1; mode=block"
},
"body": {
"id": 721,
"public_id": "longTokenId",
"bank": "bank-id",
"ssn": "ssn-number",
"status": "pending",
"created_at": "2020-03-24T09:32:05.362+01:00",
"updated_at": "2020-03-24T09:32:06.028+01:00",
"account_numbers": [],
"token": "pollingToken"
}
},
"duration": 230
}
我不希望对响应进行存根,对API进行端到端测试真是太好了。
任何帮助表示赞赏!