2

我有一个测试,其中某个获取请求发生了大约 70 次,在测试结束时,我需要检查所有状态代码是否为200or 204。到目前为止,我正在拦截该请求并可以检查该response.statusCode1 个请求,但我无法为其余的请求执行此操作。这是我到目前为止所拥有的。

it('Testing', function () {
        cy.intercept('proxy/test*').as('test')
        cy.visit('/user/test');
        const aliases = [];
        for (let i = 1; i <= 70; i++){
            aliases.push('@test')
        }
        .............
        .............
        cy.wait(aliases).its('response.statusCode').should('eq', 200 || 204)

我得到的错误是

4000 毫秒后重试超时:cy.its() 出错,因为属性:响应在您的主题上不存在。

cy.its() 等待指定的属性响应存在,但它从未存在。

有人能帮忙吗?

4

1 回答 1

1

你说大约 70 次,所以如果你测试了 70 次,实际上是 69 次,即使所有状态代码都是正确的,你也会失败。

因此,您需要一个标准来告诉测试提取已停止,通常屏幕上的某些内容仅在最终提取后出现。

如果做不到这一点,您可以使用固定等待,但通常您会尽量避免这种情况。

参考拦截响应

const statusCodes = []

cy.intercept('proxy/test*', (req) => {
  req.continue((res) => {
    statusCodes.push(res.statusCode)
  })
}).as('test')

// assert an element on page that only appears after all fetches finished

cy.wrap(statusCodes).should(codes => {
  expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})

如果您确实知道提取的确切次数,那就更容易了

const statusCodes = []

cy.intercept('proxy/test*', (req) => {
  req.continue((res) => {
    statusCodes.push(res.statusCode)
  })
}).as('test')

Cypress._.times(70, () => cy.wait('@test'))  // exact call count is known

cy.wrap(statusCodes).should(codes => {
  expect(codes.every(code => code === 200 || code === 204)).to.eq(true)
})
于 2022-02-23T20:30:15.567 回答