示例:
- 我在柏木中进行了测试
- 已创建测试帐户
- 接下来我在一次测试中失败了
- 测试帐户仍在服务器上创建
- 失败后,我想删除我创建的帐户。对于它,我有最后一个
deleteCreatedUsers()
测试,但我不知道在它失败后如何运行它。由于测试是在第一次测试失败后中断的,以节省时间
我需要一个解决方案,在类似after
的东西失败后运行一个测试
我确实尝试了after
、afterEach
和默认条件if()
。after
失败后,afterEach
什么都不做。
如果您发现测试失败时afterEach()
没有运行,那么还有另一个地方可以放置您的代码。
Cypress.on('fail', (error, runner) => {
deleteCreatedUsers();
})
Cypress推荐的方法是在beforeEach()
中执行清理,如前所述,但上述事件侦听器也可能工作,这取决于您在deleteCreatedUsers()
中执行的操作。
还可以尝试After Run API。它运行在Cypress的Node进程中,设置在cypress.config.js
中。
它应该总是在测试运行后运行,通过或失败。但是您的deleteCreatedUsers()
听起来可能像浏览器代码,您需要根据Node进程对其进行调整。
const { defineConfig } = require('cypress')
module.exports = defineConfig({
// setupNodeEvents can be defined in either
// the e2e or component configuration
e2e: {
setupNodeEvents(on, config) {
on('after:run', (results) => {
deleteCreatedUsers()
})
}
}
})
也可以在beforeEach()
而不是afterEach()
中运行,这样测试总是从明确的用户情况开始。
beforeEach(() => {
deleteCreatedUsers()
})
您可以在此处创建包含代码的afterEach
块,并使用测试状态来确定是否执行代码。
afterEach(() => {
if (Cypress.mocha.getRunner().suite.ctx.currentTest.state === 'failed') {
deleteCreatedUsers();
}
});