标签: cypress-each

使用 Cypress 测试从 React 控制列表中删除项目

我创建了一个 React 列表,用户可以通过单击按钮来删除项目。

删除的处理方式如下:

 const handleRemove = (index: number) => {
   onChange(fieldName, (prevState) => {
     return {
       ...prevState,
       [fieldName]: prevState[fieldName].filter((_: any, i: number) => i !== index),
     };
   });
 };
Run Code Online (Sandbox Code Playgroud)

当我手动测试它时,它工作正常,但是当我用 Cypress 测试它时,删除项目无法按预期工作,一些项目仍然存在。(我假设)问题在于 Cypress 同时按下每个“列表删除按钮”,当列表快速变化时,通过索引删除项目是不可信的。在现实生活中这不会造成任何问题,对吗?

如果可以的话,删除逻辑该如何重写?

如果这没什么大不了的,我怎样才能重写我的 Cypress 测试来等待几毫秒,同时 React 进行状态更新呢?

这是我经过几个小时的修补后得出的结论:

cy.get(".fa-solid.fa-minus").each((element, index) => {
      cy.wait(index * 3).then(() => {
        element.trigger("click");
      });
});
Run Code Online (Sandbox Code Playgroud)

testing typescript reactjs cypress cypress-each

5
推荐指数
1
解决办法
172
查看次数

为什么每个循环中的附加值没有存储在下一次迭代中?

接下来是简单的逻辑:点击“li”元素后,发送请求,并根据“contacts”的响应值,选择它是否大于0,一旦找到这样的元素,我需要打破每个循环。但目前,尽管我设置了值,但它应该会在下一次迭代时中断每个循环(返回 false)。count[] 已恢复为旧值,有什么问题吗?

    cy.get('div[id=company_select]').then($el => {

        const count = []
        cy.wrap($el).click().find('li').each((element, index) => {
            cy.intercept('GET', '**/company/view-json**').as('getCompanyProps')

            cy.log(count.length)
            if (count.length > 0) {
                return false
            } else {
                cy.wrap(element).click().wait('@getCompanyProps').then((interception) => {
                    if (interception.response.body.contacts.length === 0) {
                        cy.wrap($el).find('button[vs__clear]').click()
                    } else {
                        count.push(1)
                        cy.log(count.length)
                    }
                })
            }
        })

    })
Run Code Online (Sandbox Code Playgroud)

网络日志

cypress cypress-each

4
推荐指数
1
解决办法
162
查看次数

为什么 cypress 在 for 循环中只循环一次

为什么 cypress 在 for 循环中只循环一次?

测试代码是这样的:

cy.get('body').contains('Automation').each(($el, index) => {
  cy.get('body').contains('Automation').parents()
    .eq(1)
    .find('mfc-dropdown > div > mfc-button > button', { timeout: 6000 })
    .first()
    .click({ force: true });
  cy.get(this.DELETE_FILE_BUTTON).click();
  cy.get('.mfc-dialog-container')
    .find(this.CONFIRM_DELETE)
    .click({ force: true });
});
Run Code Online (Sandbox Code Playgroud)

automation typescript cypress cypress-each

1
推荐指数
1
解决办法
237
查看次数