首页 > 解决方案 > 如何在柏树中重放相同的请求?

问题描述

我想测试以下用例:

  1. cy.intercept()我用方法监听 POST API 请求
  2. 我单击执行 POST API 请求的按钮
  3. 我愿意cy.wait('@myapi').its('response.statusCode').should('eq', 200);
  4. 之后我想用 cypress 再次触发请求(比如重放它)并确保这次我得到statusCode400 并验证响应正文以包含错误消息

如何在柏树中做到这一点?有任何想法吗?:D

我试图做这样的事情:

    cy.intercept('POST', regexHelpers.getCartURIRegex(voucherCode)).as("redeemVoucher");

    cy.get('[data-cy="buttonRedeemVoucher"]').click();

    // cy.wait('@redeemVoucher').its('response.statusCode').should('eq', 200);
    cy.wait('@redeemVoucher').then(function(interception) {
      expect(interception.response.statusCode).to.eq(200);
      const url = interception.request.url;
       cy.request({
         method: 'POST',
         url: url,
         headers: {
          'Content-Type': 'application/json; charset=utf-8'
       }}).its('status').should('eq', 400);
    }); 

但在这种情况下,我得到400错误代码 - 错误的请求已经在线
expect(interception.response.statusCode).to.eq(200);

第一次调用 API 应返回 200,但使用相同凭证的第二次调用应返回 400。

我很困惑为什么它已经在这一行返回 400:
expect(interception.response.statusCode).to.eq(200);

[编辑]

我设法做到了:

cy.intercept('POST', regexHelpers.getCartURIRegex(voucherCode)).as("redeemVoucher");

    cy.get('[data-cy="buttonRedeemVoucher"]').click();

    cy.wait('@redeemVoucher').its('request.url').as('voucherUrl').then(function() {
      cy.request({
        method: 'POST',
        url: this.voucherUrl,
        failOnStatusCode: false,
        headers: {
          'Content-Type': 'application/json; charset=utf-8'
        }}).its('status').should('eq', 400);
    });  

但我不知道如何在这里也检查第一个呼叫响应代码是 200?
有人有想法吗?:D

标签: javascriptapirequestcypress

解决方案


我还做了以下工作:

cy.wait('@redeemVoucher').should(({request, response}) => {
  expect(response.statusCode).to.eq(200);

  cy.request({
    method: 'POST',
    url: request.url,
    failOnStatusCode: false,
    headers: {
      'Content-Type': 'application/json; charset=utf-8'
    }}).should((response) => {
      expect(response.status).to.eq(400);
      expect(response.body.errors[0].message).to.eq('Voucher cannot be redeemed: ' + voucherCode);
  });
});

推荐阅读