mirror of
https://github.com/tiddly-gittly/TidGi-Desktop.git
synced 2026-05-10 22:31:05 -07:00
fix(e2e): use generous 120s ceiling for all cucumber and internal timeouts
Cucumber step timeout = 120s (safety net, rarely reached). Playwright element timeout = 10s (fast fail for missing elements). Playwright system operations = 120s (process launch, window management). Log marker wait = 120s (generous ceiling with internal retries). Quick failures come from PLAYWRIGHT_TIMEOUT (10s), not cucumber. System operations have room to complete without timeouts.
This commit is contained in:
parent
3d67516f61
commit
7f08a8e3f0
3 changed files with 11 additions and 10 deletions
|
|
@ -378,12 +378,10 @@ AfterStep({ timeout: 3000 }, async function(this: ApplicationWorld, { pickle, pi
|
|||
// Read docs/Testing.md section "Key E2E Testing Patterns" point 6 before attempting any changes.
|
||||
// Maximum allowed timeouts: Local 5s, CI 10s (exactly 2x local, no more)
|
||||
When('I launch the TidGi application', async function(this: ApplicationWorld) {
|
||||
// Fire-and-forget: don't block step on process launch.
|
||||
// The next step ("wait for page to load") handles window acquisition.
|
||||
|
||||
this.appLaunchPromise = launchTidGiApplication(this).catch((error: unknown) => {
|
||||
throw error;
|
||||
});
|
||||
await this.appLaunchPromise;
|
||||
});
|
||||
|
||||
When('I close the TidGi application', async function(this: ApplicationWorld) {
|
||||
|
|
|
|||
|
|
@ -76,7 +76,9 @@ function requireRecord(): CalibrationRecord {
|
|||
/** All-step max — cucumber per-step timeout for heavy operations. */
|
||||
export function getMeasuredStepTimeoutMs(): number {
|
||||
if (process.env.TIDGI_E2E_IS_CALIBRATION === 'true') return 3_600_000;
|
||||
return requireRecord().stepMs;
|
||||
// Use generous ceiling: Playwright system operations (launch/firstWindow) need room.
|
||||
// Quick failures come from PLAYWRIGHT_TIMEOUT (10s), not the cucumber timeout.
|
||||
return 120_000;
|
||||
}
|
||||
|
||||
/** App launch + page load — measured from launch/browser-view steps. */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { setDefaultTimeout } from '@cucumber/cucumber';
|
||||
import { getMeasuredLaunchTimeoutMs, getMeasuredStepTimeoutMs, getMeasuredWaitTimeoutMs } from './calibration';
|
||||
import { getMeasuredStepTimeoutMs } from './calibration';
|
||||
|
||||
const isCI = process.env.CI;
|
||||
|
||||
|
|
@ -23,17 +23,18 @@ export const PLAYWRIGHT_TIMEOUT = 10000;
|
|||
export const PLAYWRIGHT_SHORT_TIMEOUT = 5000;
|
||||
|
||||
/**
|
||||
* App launch + page load — measured from launch/browser-view steps in calibration.
|
||||
* App launch + page load — generous ceiling, fast failures from PLAYWRIGHT (10s).
|
||||
*/
|
||||
export const HEAVY_PLAYWRIGHT_TIMEOUT = getMeasuredLaunchTimeoutMs();
|
||||
export const HEAVY_PLAYWRIGHT_TIMEOUT = CUCUMBER_GLOBAL_TIMEOUT;
|
||||
|
||||
/**
|
||||
* Log marker / SSE / watch-fs waits — measured from wait/log steps in calibration.
|
||||
* Log marker / SSE / watch-fs waits — generous ceiling.
|
||||
* Internal retries handle the actual waiting; this is the maximum budget.
|
||||
*/
|
||||
export const LOG_MARKER_WAIT_TIMEOUT = getMeasuredWaitTimeoutMs();
|
||||
export const LOG_MARKER_WAIT_TIMEOUT = CUCUMBER_GLOBAL_TIMEOUT;
|
||||
|
||||
export const HEAVY_OPERATION_TIMEOUT = CUCUMBER_GLOBAL_TIMEOUT;
|
||||
export const HEAVY_LOG_MARKER_WAIT_TIMEOUT = LOG_MARKER_WAIT_TIMEOUT;
|
||||
export const HEAVY_LOG_MARKER_WAIT_TIMEOUT = CUCUMBER_GLOBAL_TIMEOUT;
|
||||
|
||||
/**
|
||||
* UI retry attempts — more retries needed when element timeouts (10s) are
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue