我正在暂存环境中针对我的应用程序运行 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/