cypress - 在每个之前使用 Cypress 来清理数据库数据

标签 cypress

我正在暂存环境中针对我的应用程序运行 Cypress 测试列表。

文档说使用 before Hook 来删除数据,但是在运行测试并添加它之前我不知道该行的 ID,因此这是不可能的。

describe('Entity Page', () => {
  before(() => {
    const { username, password } = Cypress.env();
    cy.login(username, password);
    cy.addEntity(name, email, mobile, {});

    cy.wait(3000);
    cy.get('@id').then(id => {
      cy.visit(`/entity/${id}`)
      cy.wait(6000)
    });
  });

  it('form contains new entity details', () => {
    cy.get('[data-testid=title]').should('have.text', name);
  });


  after(() => {
    cy.get('@id').then(id => {
      cy.log('removing ID ', id);
      if (id) {
        cy.deleteEntity(id);
      }
    });
  });
});

我看不到在不知道实体生成的 ID 的情况下可以在之前运行删除的方法。但是,如果由于其他测试未运行而在我的 after block 内删除失败,这会导致问题。

当您在测试开始前不知道标识符时,是否有推荐的方法来执行此类操作?

最佳答案

由于数据库的详细信息是隐藏的,因此很难具体,但您想要一些可以执行 cy.deleteAllIds() 的操作。

如果不是,则将 id 写入固定装置

cy.get('@id').then(id => {
  cy.writeFile('cypress/fixtures/idToDelete.json', {id})
  ...
})

before()

before(() => {
  cy.fixture('idToDelete.json').then(data => {
    if (data.id) cy.deleteEntity(data.id)
    cy.writeFile('cypress/fixtures/idToDelete.json', {})
  })
})

此外(这可能有效,也可能无效)您不应该使用 after() 的原因是失败的测试可能会跳过 after Hook 。

因此,您可以捕获失败事件并删除其中的 id(但保留 after() 作为成功路径)。

cy.on('fail', () => {
  cy.get('@id').then(id => {
    cy.log('removing ID ', id);
    if (id) cy.deleteEntity(id);
  })
})

关于cypress - 在每个之前使用 Cypress 来清理数据库数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71250487/

相关文章:

jenkins - 在 Jenkins 中运行 Cypress 测试时出现跨源错误

azure - 如何使用 Cypress.io 使用 MS Active Directory 登录?

github - 在不同的 github repo 项目中共享 Cypress 中的自定义命令

reactjs - 为什么发布请求在开发模式下有效,但在生产模式或测试模式下不起作用?它返回未定义的 token

javascript - Cypress 并不总是执行点击元素

javascript - 使用 cypress 和 firestore 测试 React 应用程序显示超时重试 : cy. wait()

testing - 我可以通过 cypress api 关闭特定选项卡吗?

javascript - 如何访问表兄弟元素,在 Cypress 中具有标识符的元素

Cypress 为 API 调用添加延迟

javascript - 在 WSL 上运行 Cypress