赛普拉斯能否拦截直接向服务器发出的请求?
Can Cypress intercept requests being made directly to a server?
我一直在尝试使用 Cypress 的拦截方法拦截服务器请求。
我注意到 Cypress 可以拦截通过 front-end/browser 发出的请求,但是,如果我直接向后端服务器发出请求,拦截方法将不起作用。
让我澄清一下我的意思:
- 一件事是拦截 front-end/browser 向后端服务器发出的请求。
- 另一件事是拦截不使用浏览器但直接调用后端端点的调用。
例如:
我可以使用前端界面创建用户
或者我可以创建一个用户直接调用后端端点(直接调用服务器)。
回到我的问题。有没有办法拦截直接对后端端点进行的调用?
这是我目前尝试过的方法:
- 我写了一个正则表达式来拦截
api/v0/customers
- 然后我向
http://locahost:5440/api/v0/customers
(也就是服务器的URL)发起了请求
- 终于等到了请求的发生
Timeout request using Cypress intercept method
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 文档的任何地方都找不到这个答案。
有没有办法让我拦截直接向服务器发出的调用(不使用浏览器)?
您不必拦截您明确使用 cypress 发出的请求,只需使用 .then
获取响应,如下所示:
cy.request(createCustomer(customerData, headers)).then((response) => {
const customerId = response.body.customer_id;
console.log(response.body);
expect(response.status).equal(201);
});
我一直在尝试使用 Cypress 的拦截方法拦截服务器请求。 我注意到 Cypress 可以拦截通过 front-end/browser 发出的请求,但是,如果我直接向后端服务器发出请求,拦截方法将不起作用。
让我澄清一下我的意思:
- 一件事是拦截 front-end/browser 向后端服务器发出的请求。
- 另一件事是拦截不使用浏览器但直接调用后端端点的调用。
例如: 我可以使用前端界面创建用户 或者我可以创建一个用户直接调用后端端点(直接调用服务器)。
回到我的问题。有没有办法拦截直接对后端端点进行的调用?
这是我目前尝试过的方法:
- 我写了一个正则表达式来拦截
api/v0/customers
- 然后我向
http://locahost:5440/api/v0/customers
(也就是服务器的URL)发起了请求 - 终于等到了请求的发生
Timeout request using Cypress intercept method
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 文档的任何地方都找不到这个答案。 有没有办法让我拦截直接向服务器发出的调用(不使用浏览器)?
您不必拦截您明确使用 cypress 发出的请求,只需使用 .then
获取响应,如下所示:
cy.request(createCustomer(customerData, headers)).then((response) => {
const customerId = response.body.customer_id;
console.log(response.body);
expect(response.status).equal(201);
});