当我调用URL时,发送的请求数量不确定。
现在,我尝试找出其中一个请求是否包含某个有效负载。
cy.server();
cy.visit(url);
cy.route({
method: 'POST',
url: '**/t/e/**',
}).as('xhrRequest');
到目前为止,我已经在How to capture all API calls in cypress?上找到了类似的方法。 这里的问题是假定了固定数量的API调用。
cy.wait(Array(60).fill('@xhrRequest'), { timeout: 30000 }).then((xhrs) => {
xhrs.forEach((res) => {
expect(res.status).not.to.be.null
})
})
如果没有一个包含有效负载的请求,我该如何拦截所有请求并使其测试失败?
我已经在操纵up中写了类似的东西
let hasSpecialRequest = false;
page.on('request', request => {
if (isSpecialRequest(request)) {
hasSpecialRequest = true;
}
request.continue();
});
await page.setRequestInterception(true);
expect(hasSpecialRequest).to.equal(true);
系统检查每个请求是否为特殊请求之一,并相应地设置变量。像这样的东西我尝试用赛普拉斯重新创建。
答案 0 :(得分:0)
您可能会考虑执行cy.exec并使用另一种语言运行脚本并从子进程返回状态。
答案 1 :(得分:0)
我可能误解了这个问题,但既然我是通过 Google 探险来到这里的,也许这可能会帮助遇到我问题的人,也可能是你。
起初我使用了 cy.wait(@alias)
,但始终无法检索到所有响应(只显示了一个响应,我无法弄清楚如何访问所有响应)。所以我最终立即将响应存储到另一个数组中以在测试中访问。
let xhrRequests;
function getXhrRequests() {
xhrRequests = [];
cy.intercept('GET', '**', (res) => {
xhrRequests.push(res);
});
return xhrRequests;
}
describe('Some', function () {
it('Thing 1', () => {
let thing1 = getXhrRequests();
cy.visit('http://some.site');
thing1.forEach((res) => {
expect(res.status).not.to.be.null;
})
}
it('Thing 2', () => {
let thing2 = getXhrRequests();
cy.visit('http://some.site/2');
thing2.forEach((res) => {
expect(res.status).not.to.be.null;
})
}
});