我一直在尝试使用 Cypress 的拦截方法拦截服务器请求。我注意到 Cypress 可以拦截通过前端/浏览器发出的请求,但是,如果我直接向后端服务器发出请求,则拦截方法不起作用。
让我澄清一下我的意思:
- 一件事是拦截前端/浏览器向后端服务器发出的请求。
- 另一件事是拦截不使用浏览器但直接呼叫后端端点的呼叫。
例如:我可以使用前端界面创建一个用户,或者我可以创建一个直接呼叫后端端点的用户(直接呼叫服务器)。
回到我的问题。有没有办法拦截直接对后端端点进行的呼叫?
这是我迄今为止尝试过的:
- 我写了一个正则表达式来拦截
api/v0/customers
- 然后我向
http://locahost:5440/api/v0/customers
(这是服务器的 URL)发出请求 - 最后,我等待请求发生
使用 Cypress 拦截方法的超时请求
cy.intercept(/^\/api\/v0\/customers\/$/).as('createCustomer');
cy.request(createCustomer(customerData, headers));
cy.wait('@createCustomer').then(({ status, body }) => {
const customerId = body.customer_id;
console.log(body);
expect(status).equal(201);
});
问题是:出现超时错误。
- 正如您在图片中看到的,我正在
http://locahost:5440
向服务器 URL发出请求。注意:我确保服务器已启动并正在运行。 - 正则表达式也是正确的,它将匹配端点
http://locahost:5440/api/v0/customers
我怀疑拦截仅适用于通过浏览器发出的请求。这个说法正确吗?我在 Cypress 档案中的任何地方都找不到这个答案。有没有办法让我拦截直接向服务器发出的呼叫(不使用浏览器)?
uj5u.com热心网友回复:
您不必拦截您使用 cypress 明确发出的请求,只需用于.then
获取回应,如下所示:
cy.request(createCustomer(customerData, headers)).then((response) => {
const customerId = response.body.customer_id;
console.log(response.body);
expect(response.status).equal(201);
});
参考:https : //docs.cypress.io/api/commands/request#Yields
0 评论