拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 赛普拉斯可以拦截直接发送到服务器的请求吗?

赛普拉斯可以拦截直接发送到服务器的请求吗?

白鹭 - 2022-01-24 2033 0 0

我一直在尝试使用 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *