codeceptjs 4.0.0-rc.2 → 4.0.0-rc.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -27
- package/bin/codecept.js +15 -2
- package/bin/codeceptq.js +49 -0
- package/bin/mcp-server.js +1187 -0
- package/docs/advanced.md +201 -0
- package/docs/agents.md +159 -0
- package/docs/ai.md +537 -0
- package/docs/aitrace.md +266 -0
- package/docs/api.md +332 -0
- package/docs/assertions.md +415 -0
- package/docs/auth.md +318 -0
- package/docs/basics.md +424 -0
- package/docs/bdd.md +539 -0
- package/docs/best.md +240 -0
- package/docs/bootstrap.md +132 -0
- package/docs/commands.md +352 -0
- package/docs/community-helpers.md +63 -0
- package/docs/configuration.md +230 -0
- package/docs/continuous-integration.md +497 -0
- package/docs/custom-helpers.md +297 -0
- package/docs/data.md +448 -0
- package/docs/debugging.md +332 -0
- package/docs/detox.md +235 -0
- package/docs/docker.md +136 -0
- package/docs/effects.md +179 -0
- package/docs/element-based-testing.md +295 -0
- package/docs/element-selection.md +125 -0
- package/docs/els.md +328 -0
- package/docs/examples.md +161 -0
- package/docs/heal.md +213 -0
- package/docs/helpers/ApiDataFactory.md +267 -0
- package/docs/helpers/Appium.md +1405 -0
- package/docs/helpers/Detox.md +665 -0
- package/docs/helpers/ExpectHelper.md +275 -0
- package/docs/helpers/FileSystem.md +152 -0
- package/docs/helpers/GraphQL.md +152 -0
- package/docs/helpers/GraphQLDataFactory.md +226 -0
- package/docs/helpers/JSONResponse.md +255 -0
- package/docs/helpers/Mochawesome.md +8 -0
- package/docs/helpers/MockRequest.md +377 -0
- package/docs/helpers/MockServer.md +212 -0
- package/docs/helpers/Playwright.md +2969 -0
- package/docs/helpers/Polly.md +44 -0
- package/docs/helpers/Protractor.md +1769 -0
- package/docs/helpers/Puppeteer-firefox.md +86 -0
- package/docs/helpers/Puppeteer.md +2690 -0
- package/docs/helpers/REST.md +289 -0
- package/docs/helpers/SoftExpectHelper.md +352 -0
- package/docs/helpers/WebDriver.md +2682 -0
- package/docs/hooks.md +339 -0
- package/docs/index.md +111 -0
- package/docs/installation.md +83 -0
- package/docs/internal-api.md +265 -0
- package/docs/internal-test-server.md +89 -0
- package/docs/locators.md +355 -0
- package/docs/mcp.md +485 -0
- package/docs/migration-4.md +556 -0
- package/docs/mobile.md +338 -0
- package/docs/pageobjects.md +399 -0
- package/docs/parallel.md +585 -0
- package/docs/playwright.md +714 -0
- package/docs/plugins.md +866 -0
- package/docs/puppeteer.md +314 -0
- package/docs/quickstart.md +120 -0
- package/docs/react.md +70 -0
- package/docs/reports.md +483 -0
- package/docs/retry.md +274 -0
- package/docs/secrets.md +150 -0
- package/docs/sessions.md +80 -0
- package/docs/shadow.md +68 -0
- package/docs/test-structure.md +275 -0
- package/docs/timeouts.md +183 -0
- package/docs/translation.md +247 -0
- package/docs/tutorial.md +271 -0
- package/docs/typescript.md +374 -0
- package/docs/web-element.md +251 -0
- package/docs/webdriver.md +708 -0
- package/docs/within.md +55 -0
- package/lib/ai.js +3 -2
- package/lib/aria.js +260 -0
- package/lib/assertions.js +18 -0
- package/lib/codecept.js +26 -23
- package/lib/command/check.js +2 -1
- package/lib/command/dryRun.js +24 -5
- package/lib/command/generate.js +2 -0
- package/lib/command/gherkin/snippets.js +5 -4
- package/lib/command/init.js +248 -269
- package/lib/command/list.js +150 -10
- package/lib/command/query.js +218 -0
- package/lib/command/run-multiple.js +2 -0
- package/lib/command/run-workers.js +2 -0
- package/lib/command/run.js +1 -1
- package/lib/command/workers/runTests.js +10 -10
- package/lib/config.js +77 -4
- package/lib/container.js +114 -17
- package/lib/effects.js +17 -0
- package/lib/element/WebElement.js +246 -2
- package/lib/els.js +12 -6
- package/lib/globals.js +32 -19
- package/lib/heal.js +4 -3
- package/lib/helper/ApiDataFactory.js +2 -1
- package/lib/helper/Appium.js +8 -8
- package/lib/helper/FileSystem.js +3 -2
- package/lib/helper/GraphQLDataFactory.js +2 -1
- package/lib/helper/Playwright.js +228 -162
- package/lib/helper/Puppeteer.js +208 -76
- package/lib/helper/WebDriver.js +173 -68
- package/lib/helper/errors/MultipleElementsFound.js +27 -110
- package/lib/helper/errors/NonFocusedType.js +8 -0
- package/lib/helper/extras/Download.js +45 -0
- package/lib/helper/extras/PlaywrightReactVueLocator.js +45 -36
- package/lib/helper/extras/elementSelection.js +58 -0
- package/lib/helper/extras/focusCheck.js +43 -0
- package/lib/helper/extras/richTextEditor.js +178 -0
- package/lib/helper/scripts/dropFile.js +11 -0
- package/lib/history.js +3 -2
- package/lib/html.js +103 -16
- package/lib/index.js +9 -1
- package/lib/listener/config.js +6 -4
- package/lib/listener/emptyRun.js +2 -1
- package/lib/listener/globalRetry.js +32 -6
- package/lib/listener/helpers.js +4 -1
- package/lib/listener/mocha.js +2 -1
- package/lib/listener/pageobjects.js +43 -0
- package/lib/listener/result.js +3 -2
- package/lib/locator.js +126 -3
- package/lib/mocha/cli.js +14 -2
- package/lib/mocha/factory.js +7 -2
- package/lib/mocha/inject.js +1 -1
- package/lib/mocha/scenarioConfig.js +2 -1
- package/lib/mocha/ui.js +5 -6
- package/lib/parser.js +2 -2
- package/lib/pause.js +38 -4
- package/lib/plugin/aiTrace.js +453 -0
- package/lib/plugin/analyze.js +1 -1
- package/lib/plugin/auth.js +3 -3
- package/lib/plugin/browser.js +77 -0
- package/lib/plugin/expose.js +159 -0
- package/lib/plugin/heal.js +44 -1
- package/lib/plugin/pageInfo.js +53 -49
- package/lib/plugin/pause.js +131 -0
- package/lib/plugin/pauseOnFail.js +10 -34
- package/lib/plugin/retryFailedStep.js +28 -19
- package/lib/plugin/screencast.js +287 -0
- package/lib/plugin/screenshot.js +563 -0
- package/lib/plugin/screenshotOnFail.js +8 -171
- package/lib/rerun.js +2 -1
- package/lib/result.js +2 -1
- package/lib/step/base.js +3 -2
- package/lib/step/config.js +15 -2
- package/lib/step/record.js +2 -2
- package/lib/store.js +72 -3
- package/lib/translation.js +2 -1
- package/lib/utils/mask_data.js +2 -1
- package/lib/utils/pluginParser.js +151 -0
- package/lib/utils/trace.js +297 -0
- package/lib/utils.js +77 -3
- package/lib/workers.js +52 -22
- package/package.json +19 -13
- package/typings/index.d.ts +19 -5
- package/docs/webapi/amOnPage.mustache +0 -11
- package/docs/webapi/appendField.mustache +0 -11
- package/docs/webapi/attachFile.mustache +0 -12
- package/docs/webapi/blur.mustache +0 -18
- package/docs/webapi/checkOption.mustache +0 -13
- package/docs/webapi/clearCookie.mustache +0 -9
- package/docs/webapi/clearField.mustache +0 -9
- package/docs/webapi/click.mustache +0 -29
- package/docs/webapi/clickLink.mustache +0 -8
- package/docs/webapi/closeCurrentTab.mustache +0 -7
- package/docs/webapi/closeOtherTabs.mustache +0 -8
- package/docs/webapi/dontSee.mustache +0 -11
- package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/dontSeeCookie.mustache +0 -8
- package/docs/webapi/dontSeeCurrentPathEquals.mustache +0 -10
- package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
- package/docs/webapi/dontSeeElement.mustache +0 -8
- package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
- package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
- package/docs/webapi/dontSeeInField.mustache +0 -11
- package/docs/webapi/dontSeeInSource.mustache +0 -8
- package/docs/webapi/dontSeeInTitle.mustache +0 -8
- package/docs/webapi/dontSeeTraffic.mustache +0 -13
- package/docs/webapi/doubleClick.mustache +0 -13
- package/docs/webapi/downloadFile.mustache +0 -12
- package/docs/webapi/dragAndDrop.mustache +0 -9
- package/docs/webapi/dragSlider.mustache +0 -11
- package/docs/webapi/executeAsyncScript.mustache +0 -24
- package/docs/webapi/executeScript.mustache +0 -26
- package/docs/webapi/fillField.mustache +0 -16
- package/docs/webapi/flushNetworkTraffics.mustache +0 -5
- package/docs/webapi/focus.mustache +0 -13
- package/docs/webapi/forceClick.mustache +0 -28
- package/docs/webapi/forceRightClick.mustache +0 -18
- package/docs/webapi/grabAllWindowHandles.mustache +0 -7
- package/docs/webapi/grabAttributeFrom.mustache +0 -10
- package/docs/webapi/grabAttributeFromAll.mustache +0 -9
- package/docs/webapi/grabBrowserLogs.mustache +0 -9
- package/docs/webapi/grabCookie.mustache +0 -11
- package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
- package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
- package/docs/webapi/grabCurrentUrl.mustache +0 -9
- package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
- package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
- package/docs/webapi/grabElementBoundingRect.mustache +0 -20
- package/docs/webapi/grabGeoLocation.mustache +0 -8
- package/docs/webapi/grabHTMLFrom.mustache +0 -10
- package/docs/webapi/grabHTMLFromAll.mustache +0 -9
- package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
- package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
- package/docs/webapi/grabPageScrollPosition.mustache +0 -8
- package/docs/webapi/grabPopupText.mustache +0 -5
- package/docs/webapi/grabRecordedNetworkTraffics.mustache +0 -10
- package/docs/webapi/grabSource.mustache +0 -8
- package/docs/webapi/grabTextFrom.mustache +0 -10
- package/docs/webapi/grabTextFromAll.mustache +0 -9
- package/docs/webapi/grabTitle.mustache +0 -8
- package/docs/webapi/grabValueFrom.mustache +0 -9
- package/docs/webapi/grabValueFromAll.mustache +0 -8
- package/docs/webapi/grabWebElement.mustache +0 -9
- package/docs/webapi/grabWebElements.mustache +0 -9
- package/docs/webapi/moveCursorTo.mustache +0 -12
- package/docs/webapi/openNewTab.mustache +0 -7
- package/docs/webapi/pressKey.mustache +0 -12
- package/docs/webapi/pressKeyDown.mustache +0 -12
- package/docs/webapi/pressKeyUp.mustache +0 -12
- package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
- package/docs/webapi/refreshPage.mustache +0 -6
- package/docs/webapi/resizeWindow.mustache +0 -6
- package/docs/webapi/rightClick.mustache +0 -14
- package/docs/webapi/saveElementScreenshot.mustache +0 -10
- package/docs/webapi/saveScreenshot.mustache +0 -12
- package/docs/webapi/say.mustache +0 -10
- package/docs/webapi/scrollIntoView.mustache +0 -11
- package/docs/webapi/scrollPageToBottom.mustache +0 -6
- package/docs/webapi/scrollPageToTop.mustache +0 -6
- package/docs/webapi/scrollTo.mustache +0 -12
- package/docs/webapi/see.mustache +0 -11
- package/docs/webapi/seeAttributesOnElements.mustache +0 -9
- package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/seeCookie.mustache +0 -8
- package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
- package/docs/webapi/seeCurrentPathEquals.mustache +0 -10
- package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
- package/docs/webapi/seeElement.mustache +0 -8
- package/docs/webapi/seeElementInDOM.mustache +0 -8
- package/docs/webapi/seeInCurrentUrl.mustache +0 -8
- package/docs/webapi/seeInField.mustache +0 -12
- package/docs/webapi/seeInPopup.mustache +0 -8
- package/docs/webapi/seeInSource.mustache +0 -7
- package/docs/webapi/seeInTitle.mustache +0 -8
- package/docs/webapi/seeNumberOfElements.mustache +0 -11
- package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/seeTextEquals.mustache +0 -9
- package/docs/webapi/seeTitleEquals.mustache +0 -8
- package/docs/webapi/seeTraffic.mustache +0 -36
- package/docs/webapi/selectOption.mustache +0 -21
- package/docs/webapi/setCookie.mustache +0 -16
- package/docs/webapi/setGeoLocation.mustache +0 -12
- package/docs/webapi/startRecordingTraffic.mustache +0 -8
- package/docs/webapi/startRecordingWebSocketMessages.mustache +0 -8
- package/docs/webapi/stopRecordingTraffic.mustache +0 -5
- package/docs/webapi/stopRecordingWebSocketMessages.mustache +0 -7
- package/docs/webapi/switchTo.mustache +0 -9
- package/docs/webapi/switchToNextTab.mustache +0 -10
- package/docs/webapi/switchToPreviousTab.mustache +0 -10
- package/docs/webapi/type.mustache +0 -21
- package/docs/webapi/uncheckOption.mustache +0 -13
- package/docs/webapi/wait.mustache +0 -8
- package/docs/webapi/waitForClickable.mustache +0 -11
- package/docs/webapi/waitForCookie.mustache +0 -9
- package/docs/webapi/waitForDetached.mustache +0 -10
- package/docs/webapi/waitForDisabled.mustache +0 -6
- package/docs/webapi/waitForElement.mustache +0 -11
- package/docs/webapi/waitForEnabled.mustache +0 -6
- package/docs/webapi/waitForFunction.mustache +0 -17
- package/docs/webapi/waitForInvisible.mustache +0 -10
- package/docs/webapi/waitForNumberOfTabs.mustache +0 -9
- package/docs/webapi/waitForText.mustache +0 -13
- package/docs/webapi/waitForValue.mustache +0 -10
- package/docs/webapi/waitForVisible.mustache +0 -10
- package/docs/webapi/waitInUrl.mustache +0 -9
- package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/waitToHide.mustache +0 -10
- package/docs/webapi/waitUrlEquals.mustache +0 -10
- package/lib/helper/AI.js +0 -214
- package/lib/listener/enhancedGlobalRetry.js +0 -110
- package/lib/plugin/enhancedRetryFailedStep.js +0 -99
- package/lib/plugin/htmlReporter.js +0 -3648
- package/lib/plugin/stepByStepReport.js +0 -427
- package/lib/plugin/subtitles.js +0 -89
- package/lib/retryCoordinator.js +0 -207
- package/typings/promiseBasedTypes.d.ts +0 -9469
- package/typings/types.d.ts +0 -11402
package/lib/retryCoordinator.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import output from './output.js'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Retry Coordinator - Central coordination for all retry mechanisms
|
|
5
|
-
*
|
|
6
|
-
* This module provides:
|
|
7
|
-
* 1. Priority-based retry coordination
|
|
8
|
-
* 2. Unified configuration validation
|
|
9
|
-
* 3. Consolidated retry reporting
|
|
10
|
-
* 4. Conflict detection and resolution
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Priority levels for retry mechanisms (higher number = higher priority)
|
|
15
|
-
*/
|
|
16
|
-
const RETRY_PRIORITIES = {
|
|
17
|
-
MANUAL_STEP: 100, // I.retry() or step.retry() - highest priority
|
|
18
|
-
STEP_PLUGIN: 50, // retryFailedStep plugin
|
|
19
|
-
SCENARIO_CONFIG: 30, // Global scenario retry config
|
|
20
|
-
FEATURE_CONFIG: 20, // Global feature retry config
|
|
21
|
-
HOOK_CONFIG: 10, // Hook retry config - lowest priority
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Retry mechanism types
|
|
26
|
-
*/
|
|
27
|
-
const RETRY_TYPES = {
|
|
28
|
-
MANUAL_STEP: 'manual-step',
|
|
29
|
-
STEP_PLUGIN: 'step-plugin',
|
|
30
|
-
SCENARIO: 'scenario',
|
|
31
|
-
FEATURE: 'feature',
|
|
32
|
-
HOOK: 'hook',
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Global retry coordination state
|
|
37
|
-
*/
|
|
38
|
-
let retryState = {
|
|
39
|
-
activeTest: null,
|
|
40
|
-
activeSuite: null,
|
|
41
|
-
retryHistory: [],
|
|
42
|
-
conflicts: [],
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Registers a retry mechanism for coordination
|
|
47
|
-
* @param {string} type - Type of retry mechanism
|
|
48
|
-
* @param {Object} config - Retry configuration
|
|
49
|
-
* @param {Object} target - Target object (test, suite, etc.)
|
|
50
|
-
* @param {number} priority - Priority level
|
|
51
|
-
*/
|
|
52
|
-
function registerRetry(type, config, target, priority = 0) {
|
|
53
|
-
const retryInfo = {
|
|
54
|
-
type,
|
|
55
|
-
config,
|
|
56
|
-
target,
|
|
57
|
-
priority,
|
|
58
|
-
timestamp: Date.now(),
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Detect conflicts
|
|
62
|
-
const existingRetries = retryState.retryHistory.filter(r => r.target === target && r.type !== type && r.priority !== priority)
|
|
63
|
-
|
|
64
|
-
if (existingRetries.length > 0) {
|
|
65
|
-
const conflict = {
|
|
66
|
-
newRetry: retryInfo,
|
|
67
|
-
existingRetries: existingRetries,
|
|
68
|
-
resolved: false,
|
|
69
|
-
}
|
|
70
|
-
retryState.conflicts.push(conflict)
|
|
71
|
-
handleRetryConflict(conflict)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
retryState.retryHistory.push(retryInfo)
|
|
75
|
-
|
|
76
|
-
output.log(`[Retry Coordinator] Registered ${type} retry (priority: ${priority})`)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Handles conflicts between retry mechanisms
|
|
81
|
-
* @param {Object} conflict - Conflict information
|
|
82
|
-
*/
|
|
83
|
-
function handleRetryConflict(conflict) {
|
|
84
|
-
const { newRetry, existingRetries } = conflict
|
|
85
|
-
|
|
86
|
-
// Find highest priority retry
|
|
87
|
-
const allRetries = [newRetry, ...existingRetries]
|
|
88
|
-
const highestPriority = Math.max(...allRetries.map(r => r.priority))
|
|
89
|
-
const winningRetry = allRetries.find(r => r.priority === highestPriority)
|
|
90
|
-
|
|
91
|
-
// Log the conflict resolution
|
|
92
|
-
output.log(`[Retry Coordinator] Conflict detected:`)
|
|
93
|
-
allRetries.forEach(retry => {
|
|
94
|
-
const status = retry === winningRetry ? 'ACTIVE' : 'DEFERRED'
|
|
95
|
-
output.log(` - ${retry.type} (priority: ${retry.priority}) [${status}]`)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
conflict.resolved = true
|
|
99
|
-
conflict.winner = winningRetry
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Gets the effective retry configuration for a target
|
|
104
|
-
* @param {Object} target - Target object (test, suite, etc.)
|
|
105
|
-
* @returns {Object} Effective retry configuration
|
|
106
|
-
*/
|
|
107
|
-
function getEffectiveRetryConfig(target) {
|
|
108
|
-
const targetRetries = retryState.retryHistory.filter(r => r.target === target)
|
|
109
|
-
|
|
110
|
-
if (targetRetries.length === 0) {
|
|
111
|
-
return { type: 'none', retries: 0 }
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Find highest priority retry
|
|
115
|
-
const highestPriority = Math.max(...targetRetries.map(r => r.priority))
|
|
116
|
-
const effectiveRetry = targetRetries.find(r => r.priority === highestPriority)
|
|
117
|
-
|
|
118
|
-
return {
|
|
119
|
-
type: effectiveRetry.type,
|
|
120
|
-
retries: effectiveRetry.config.retries || effectiveRetry.config,
|
|
121
|
-
config: effectiveRetry.config,
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Generates a retry summary report
|
|
127
|
-
* @returns {Object} Retry summary
|
|
128
|
-
*/
|
|
129
|
-
function generateRetrySummary() {
|
|
130
|
-
const summary = {
|
|
131
|
-
totalRetryMechanisms: retryState.retryHistory.length,
|
|
132
|
-
conflicts: retryState.conflicts.length,
|
|
133
|
-
byType: {},
|
|
134
|
-
recommendations: [],
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Count by type
|
|
138
|
-
retryState.retryHistory.forEach(retry => {
|
|
139
|
-
summary.byType[retry.type] = (summary.byType[retry.type] || 0) + 1
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
// Generate recommendations
|
|
143
|
-
if (summary.conflicts > 0) {
|
|
144
|
-
summary.recommendations.push('Consider consolidating retry configurations to avoid conflicts')
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (summary.byType[RETRY_TYPES.STEP_PLUGIN] && summary.byType[RETRY_TYPES.SCENARIO]) {
|
|
148
|
-
summary.recommendations.push('Step-level and scenario-level retries are both active - consider using only one approach')
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
return summary
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Resets the retry coordination state (useful for testing)
|
|
156
|
-
*/
|
|
157
|
-
function reset() {
|
|
158
|
-
retryState = {
|
|
159
|
-
activeTest: null,
|
|
160
|
-
activeSuite: null,
|
|
161
|
-
retryHistory: [],
|
|
162
|
-
conflicts: [],
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Validates retry configuration for common issues
|
|
168
|
-
* @param {Object} config - Configuration object
|
|
169
|
-
* @returns {Array} Array of validation warnings
|
|
170
|
-
*/
|
|
171
|
-
function validateConfig(config) {
|
|
172
|
-
const warnings = []
|
|
173
|
-
|
|
174
|
-
if (!config) return warnings
|
|
175
|
-
|
|
176
|
-
// Check for potential configuration conflicts
|
|
177
|
-
if (config.retry && config.plugins && config.plugins.retryFailedStep) {
|
|
178
|
-
const globalRetries = typeof config.retry === 'number' ? config.retry : config.retry.Scenario || config.retry.Feature
|
|
179
|
-
const stepRetries = config.plugins.retryFailedStep.retries || 3
|
|
180
|
-
|
|
181
|
-
if (globalRetries && stepRetries) {
|
|
182
|
-
warnings.push(`Both global retries (${globalRetries}) and step retries (${stepRetries}) are configured - total executions could be ${globalRetries * (stepRetries + 1)}`)
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Check for excessive retry counts
|
|
187
|
-
if (config.retry) {
|
|
188
|
-
const retryValues = typeof config.retry === 'number' ? [config.retry] : Object.values(config.retry)
|
|
189
|
-
const maxRetries = Math.max(...retryValues.filter(v => typeof v === 'number'))
|
|
190
|
-
|
|
191
|
-
if (maxRetries > 5) {
|
|
192
|
-
warnings.push(`High retry count detected (${maxRetries}) - consider investigating test stability instead`)
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return warnings
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export {
|
|
200
|
-
RETRY_PRIORITIES,
|
|
201
|
-
RETRY_TYPES,
|
|
202
|
-
registerRetry,
|
|
203
|
-
getEffectiveRetryConfig,
|
|
204
|
-
generateRetrySummary,
|
|
205
|
-
validateConfig,
|
|
206
|
-
reset,
|
|
207
|
-
}
|