我有一个测试,其中某个获取请求大约发生了70次,在测试结束时,我需要判断所有状态代码是否都是200204.到目前为止,我正在拦截请求,可以为这1个请求判断response.statusCode,但是我在为睡觉做这件事上遇到了问题.这是我到目前为止所拥有的.

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)

我得到的错误是

4000ms:cy后重试超时.its()出错,因为主题上不存在属性:response.

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

有人能帮这个忙吗?

推荐答案

您说的是100,所以如果您正好测试了70次,而实际上是69次,那么即使所有statusCodes都是正确的,您也会得到一个失败.

因此,您需要一个条件来告诉测试获取已经停止,通常情况下,屏幕上的某些内容只在最后一次获取之后才会出现.

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

参考文献Intercepting-a-response

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)
})

Javascript相关问答推荐

React native在不首次加载时渲染的挂钩比上一次渲染期间渲染的挂钩更多

使用expressjs加载Nuxt版本=3.9.0(自定义服务器)

为什么新的Promises会在不需要的情况下被用来等待?

为什么子组件没有在reaction中渲染?

调用SEARCH函数后,程序不会结束

JavaScript文本区域阻止KeyDown/KeyUp事件本身上的Alt GR +键组合

如何在mongoose中链接两个模型?

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

在286之后恢复轮询

在react JS中映射数组对象的嵌套数据

使用JQuery单击元素从新弹出窗口获取值

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

如何解决useState错误—setSelect Image不是函数''

将核心模块导入另一个组件模块时存在多个主题

在浏览器中触发插入事件时检索编码值的能力

NG/Express API路由处理程序停止工作

使用带有HostBinding的Angular 信号来更新样式?

在Odoo中如何以编程方式在POS中添加产品

我不知道如何纠正这一点.

为什么我不能使用其同级元素调用和更新子元素?