在 each 之前使用 Cypress 来清理数据库数据
Using Cypress's before each to clean up DB data
我正在运行在暂存环境中针对我的应用程序设置 Cypress 测试列表。
文档说使用 before
挂钩删除数据,但是在我 运行 测试并添加它之前我不知道行的 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 块中删除失败,这就会导致问题,因为其他测试没有 运行.
当您在测试开始前不知道标识符时,是否有推荐的方法来执行此类操作?
由于您的数据库的详细信息是隐藏的,因此很难具体说明,但您想要的东西可以 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 挂钩。
因此您可以捕获失败事件并删除那里的 ID(但保留成功路径的 after()
)。
cy.on('fail', () => {
cy.get('@id').then(id => {
cy.log('removing ID ', id);
if (id) cy.deleteEntity(id);
})
})
我正在运行在暂存环境中针对我的应用程序设置 Cypress 测试列表。
文档说使用 before
挂钩删除数据,但是在我 运行 测试并添加它之前我不知道行的 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 块中删除失败,这就会导致问题,因为其他测试没有 运行.
当您在测试开始前不知道标识符时,是否有推荐的方法来执行此类操作?
由于您的数据库的详细信息是隐藏的,因此很难具体说明,但您想要的东西可以 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 挂钩。
因此您可以捕获失败事件并删除那里的 ID(但保留成功路径的 after()
)。
cy.on('fail', () => {
cy.get('@id').then(id => {
cy.log('removing ID ', id);
if (id) cy.deleteEntity(id);
})
})