codeceptjs
Version:
Supercharged End 2 End Testing Framework for NodeJS
71 lines (56 loc) • 1.82 kB
JavaScript
const event = require('../event')
const output = require('../output')
const Config = require('../config')
const { isNotSet } = require('../utils')
const hooks = ['Before', 'After', 'BeforeSuite', 'AfterSuite']
module.exports = function () {
event.dispatcher.on(event.suite.before, suite => {
let retryConfig = Config.get('retry')
if (!retryConfig) return
if (Number.isInteger(+retryConfig)) {
// is number
const retryNum = +retryConfig
output.log(`Retries: ${retryNum}`)
suite.retries(retryNum)
return
}
if (!Array.isArray(retryConfig)) {
retryConfig = [retryConfig]
}
for (const config of retryConfig) {
if (config.grep) {
if (!suite.title.includes(config.grep)) continue
}
hooks
.filter(hook => !!config[hook])
.forEach(hook => {
if (isNotSet(suite.opts[`retry${hook}`])) suite.opts[`retry${hook}`] = config[hook]
})
if (config.Feature) {
if (isNotSet(suite.retries())) suite.retries(config.Feature)
}
output.log(`Retries: ${JSON.stringify(config)}`)
}
})
event.dispatcher.on(event.test.before, test => {
let retryConfig = Config.get('retry')
if (!retryConfig) return
if (Number.isInteger(+retryConfig)) {
if (test.retries() === -1) test.retries(retryConfig)
return
}
if (!Array.isArray(retryConfig)) {
retryConfig = [retryConfig]
}
retryConfig = retryConfig.filter(config => !!config.Scenario)
for (const config of retryConfig) {
if (config.grep) {
if (!test.fullTitle().includes(config.grep)) continue
}
if (config.Scenario) {
if (test.retries() === -1) test.retries(config.Scenario)
output.log(`Retries: ${config.Scenario}`)
}
}
})
}