赛普拉斯,从API响应中读取数据

时间:2019-08-30 15:22:55

标签: javascript reactjs testing cypress

我发现的所有示例都涉及调用API以及定义方法和URL。例如

  cy.server()

  cy.route({
    method: 'GET',
    url:'https://www.something.com, 
    }).as('get_jobs')

  cy.get('[data-cy="job-search-input"] button').click()

  cy.wait('@get_jobs').then((xhr) => {
     cy.log(xhr.response.body.data)
  })

我想要的只是选择按钮,然后单击单击并阅读它给我的响应。我不想再次定义url和method,而是使用代码中已使用的url和method,然后只需按下按钮后检查它给我的响应即可。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

根据上面的问题和评论,听起来您正在尝试执行以下操作:

  1. 设置您的应用程序
  2. 单击按钮(或执行其他操作)以启动对API的请求
  3. 捕获来自API的响应
  4. 使用响应来测试应用程序中的其他内容(也许要确保页面上的某些文本更改?)

虽然可以通过这种方式编写测试,但是存在一个问题:API的响应可能会根据您无法控制的情况而变化。例如,如果您正在处理项目,并且API当天发生故障,该怎么办?您的代码将要中断,并且不会由于代码中的错误引起。实际上,您根本不会测试代码(至少不会测试您认为正在测试的代码),因为您不会从API获得想要的响应。 >

这就是赛普拉斯提供一种对请求进行存根的方法的原因-确保在运行测试时,可以从API获得所需的响应。如果要编写测试以查看API返回值A时会发生什么,则需要确保API不返回值B。对请求进行存根可以确保应用程序在需要时获取值A。

所以您看到的示例可能会执行以下操作:

  1. 设置您的应用程序
  2. 使用cy.route对API请求进行存根以返回已知值
  3. 单击按钮-您的应用现在发出请求并取回该已知值
  4. 测试您的应用程序,以确保它在达到已知值时能够达到预期的效果。

如果要测试应用程序的行为的响应值范围不同,请编写一组测试,每个值一个。

答案 1 :(得分:0)

如果您只想阅读回复,则可以使用onReponse in cy.server

[0,1,2,3].reduce((acc, val, index) => {
  console.log(index);
  return acc;
}, 0);