Skip to content

CI: improve QUnit tests stability#34150

Merged
EugeniyKiyashko merged 9 commits into
DevExpress:26_1from
EugeniyKiyashko:26_1_qUnit_stability
Jul 1, 2026
Merged

CI: improve QUnit tests stability#34150
EugeniyKiyashko merged 9 commits into
DevExpress:26_1from
EugeniyKiyashko:26_1_qUnit_stability

Conversation

@EugeniyKiyashko

Copy link
Copy Markdown
Contributor

No description provided.

@EugeniyKiyashko EugeniyKiyashko self-assigned this Jun 26, 2026
@EugeniyKiyashko EugeniyKiyashko requested a review from a team as a code owner June 26, 2026 13:36
@EugeniyKiyashko EugeniyKiyashko requested a review from a team June 26, 2026 13:36
@EugeniyKiyashko EugeniyKiyashko requested review from a team as code owners June 26, 2026 13:36
@EugeniyKiyashko EugeniyKiyashko force-pushed the 26_1_qUnit_stability branch 6 times, most recently from ca94974 to dce039a Compare June 30, 2026 09:03
Copilot AI review requested due to automatic review settings July 1, 2026 09:11

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR targets CI stability for DevExtreme’s QUnit and TestCafe suites by simplifying QUnit suite metadata/selection, adding more deterministic waits in several flaky tests, and improving runner/CI observability and scheduling.

Changes:

  • Simplifies QUnit category metadata (__meta.json) and removes runner support for legacy Explicit/RunOnDevices flags.
  • Reworks several QUnit tests to reduce timing flakiness (polling/wait helpers, loading-panel waits, mock loading), and adds a global QUnit test timeout.
  • Improves CI behavior/telemetry (runner logs per-test runtime, adjusts QUnit workflow matrix/parallelism, tweaks watchdog logging; marks/adjusts some TestCafe tests).

Reviewed changes

Copilot reviewed 63 out of 67 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/devextreme/testing/tests/Memory Leaks/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.vectorMap/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.vectorMap.utils/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.treeMap/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.sparklines/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.sankey/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.renderers/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.rangeSelector/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.gauges/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.funnel/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.core/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.core.series/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.viz.charts/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.utils/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.treeList/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.pivotGrid/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.htmlEditor/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.form/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets.dataGrid/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.events/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.serverSide/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.serverSide.htmlEditor/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.localization/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.knockout/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.jquery/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.exporter/__meta.json Moves exporter tests into ui.grid constellation; removes unused flags.
packages/devextreme/testing/tests/DevExpress.data/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.core/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.common/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.aspnet/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.animation/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/Bundles/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/Bootstrap Integration/__meta.json Removes unused category flags; keeps only constellation.
packages/devextreme/testing/tests/DevExpress.ui.widgets/mapParts/azureTests.js Refactors Azure mock loading and makes some tests async.
packages/devextreme/testing/tests/DevExpress.ui.widgets/listParts/commonTests.js Replaces fixed timeouts with “wait until animation settled” polling.
packages/devextreme/testing/tests/DevExpress.ui.widgets/fileManagerParts/toolbar.tests.js Removes a skipped test block.
packages/devextreme/testing/tests/DevExpress.ui.widgets/fileManagerParts/contextMenu.tests.js Removes a skipped test block.
packages/devextreme/testing/tests/DevExpress.ui.widgets/chatParts/messageList.tests.js Introduces polling helper and converts multiple scroll-related tests to async waits.
packages/devextreme/testing/tests/DevExpress.ui.widgets/chatParts/chat.tests.js Adds async wait helpers for editing preview animation timing; refactors tests away from fixed timeouts.
packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/common.tests.js Adds an explicit wait for load panel removal.
packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.monthView.tests.js Uses waitForAsync to wait for appointments rendering.
packages/devextreme/testing/tests/DevExpress.ui.widgets.scheduler/appointment.editing.tests.js Adjusts instance creation/waits to reduce timing flakiness.
packages/devextreme/testing/runner/templates/run-suite.template.html Sets global QUnit testTimeout to 40 seconds.
packages/devextreme/testing/runner/templates/run-all.template.html Sends per-test runtime to the runner backend.
packages/devextreme/testing/runner/templates/index.template.html Removes “explicit” category UI/logic; defaults to selecting all categories.
packages/devextreme/testing/runner/lib/types.ts Removes export constellation and Explicit/RunOnDevices fields from category types.
packages/devextreme/testing/runner/lib/suites.ts Removes device/explicit filtering logic and stops reading removed meta flags.
packages/devextreme/testing/runner/index.ts Logs test/suite runtime in seconds; removes deviceMode handling.
packages/devextreme/project.json Adjusts Nx inputs to better reflect dependent outputs/env for caching.
packages/devextreme/js/__internal/scheduler/scheduler.ts Guards workspace refresh/focus after disposal to avoid runtime errors.
packages/devextreme/js/__internal/scheduler/scheduler_options_base_widget.ts Declares _disposed typing used by scheduler guard.
packages/devextreme/docker-ci.sh Reduces retries and improves watchdog stall logging with idle seconds.
e2e/testcafe-devextreme/tests/dataGrid/common/aiColumn/virtualScrolling.functional.ts Marks a TestCafe test as unstable.
e2e/testcafe-devextreme/tests/common/pivotGrid/fieldPanel/dragAndDropFieldItems.ts Adjusts fixture/test metadata related to reloads/unstable tagging.
e2e/testcafe-devextreme/tests/cardView/headerFilter/common.functional.ts Adds intermediate assertions for tree expansion to reduce flakiness.
e2e/testcafe-devextreme/tests/cardView/columnChooser/functional.ts Waits for widget readiness after toggling column visibility.
.github/workflows/testcafe_tests.yml Tunes matrix concurrency for some suites/themes.
.github/workflows/qunit_tests.yml Adjusts QUnit constellation matrix (incl. ui.grid) and reduces worker counts for stability.
Comments suppressed due to low confidence (2)

packages/devextreme/testing/tests/DevExpress.ui.widgets/mapParts/azureTests.js:318

  • This test is declared as async (so QUnit will finish it when the returned promise resolves) but it also uses assert.async()/done(). In an async test, the promise resolves as soon as the function body completes, which can end the test before onReady runs, causing "assertion after test finished" errors or silent false positives. Prefer returning/awaiting a promise that resolves on onReady and remove assert.async().
    packages/devextreme/testing/tests/DevExpress.ui.widgets/mapParts/azureTests.js:389
  • Same issue as above: async test + assert.async() risks completing the test before the onReady callback runs. Remove done() and await a promise tied to onReady.

@EugeniyKiyashko EugeniyKiyashko merged commit 5b7bb4a into DevExpress:26_1 Jul 1, 2026
100 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants