cypress 拦截中的 API 模拟

问题描述 投票:0回答:1

我是柏树新手。 问题:当控制台 -> 网络选项卡中出现多个 API 时,我无法拦截 API 模拟的 url

描述:我的需求如下:

  1. 登录网站,获得登陆页面后,转到特定网页,选择多个测试用例复选框
  2. 打开控制台->网络选项卡,然后单击运行
  3. 注意多个 API 即将推出
  4. 我在其中选择了一个 API url。我想嘲笑这个特定的人。 'GET'方法,url(比如:
    https://externalAPIurl
    )复制到下面的代码中
//verify landing page is reached
cy.contains("this is landing page").should("exist");

//after login open testcase page

cy.visit(
  "https://example.com/testcases"
);

//go to test suite tab test suite
cy.get("#testsuiteid")
  .click();
 //click test suite name 
cy.contains("testsuitename").click();

// select all test cases 
cy.get(".testcasecheckbox")
  .click();


cy.intercept(
  {
    method: "GET",
    url: "https://externalAPIurl",
  },
  {
    headers: {
      authorization:
        "AABBXXYY",
    },
  },
  {
    statusCode: 200,
    body: [
      {
        status: 200,
        result: true,
        combination: [
          //same data...
        ],
      },

    ],
  }
);

cy.get("#run_button").click();

});

我哪里错了?

我使用 Get 方法和 Header-> Authorization key 检查了邮递员、URL,并具有正确的授权密钥值(从网络控制台标头收集),给出了正确的响应,但 cy.intercept 抛出错误

如何解决这个问题? 每当我们在网站中单击按钮时,控制台->网络中都会显示多个外部 API。如果我采用其中任何一个 -> 检查 URL、方法、标头并在邮递员中获得与网络控制台中相同的响应,我应该能够模拟相同的请求 URL。 当网络控制台中出现一个 API 时,我尝试了相同的操作。很好。但是当我从多个中选择一个时,结果是错误的。

请注意:我已包含标题授权,可能格式错误。但如果我给予或不给予授权,结果都是同样的错误。

api mocking cypress cypress-intercept
1个回答
0
投票

如果您想拦截“GET”并使用预定义数据存根响应。我首先会使用开发工具网络选项卡来捕获您想要的 api 响应。复制响应并在固定文件夹中另存为 json 文件(您可以根据需要编辑此文件,以按照您希望的方式伪造数据)。从那里您可以执行以下操作:

cy.fixture('apiResponse.json').as('fixture data')
.then( (data) =>{
  const raw = JSON.stringify(data)
  cy.request( {
    method : 'GET',
    url : 'api url here',
    headers : {
      authorization : 'AABBXXYY',
    },
    body : raw
})
.then( (response) => {
  cy.log(response.body)
  expect(`Response.status = ${response.status}`).to.eq('Response.status = 200')
})
})
© www.soinside.com 2019 - 2024. All rights reserved.