From a265194c6963a91f72b16aac3a4dd9888fb11fc4 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 21 Jan 2026 17:13:55 +0000
Subject: [PATCH 1/4] Initial plan
From 50371bb43b28431261e1a99a123ef9d7033d0d97 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 21 Jan 2026 17:24:07 +0000
Subject: [PATCH 2/4] fix(tests): fix missing imports and deprecated properties
- Add expect import to calendar-helper-utils.ts
- Replace jasmine.getEnv() with vitest beforeEach/afterEach
- Replace jasmine.createSpyObj with vi.fn() based mocks
- Replace pending() with it.skip()
- Fix expect() message syntax for vitest (message before assertion)
- Remove deprecated exportExcel and exportCsv properties
- Remove deprecated moveable property from column definitions
- Fix mock emitter types to use any for compatibility
Co-authored-by: ChronosSF <2188411+ChronosSF@users.noreply.github.com>
---
.../test-utils/calendar-helper-utils.ts | 1 +
.../test-utils/grid-base-components.spec.ts | 4 +--
.../test-utils/grid-functions.spec.ts | 20 +++++------
.../test-utils/helper-utils.spec.ts | 33 ++++---------------
.../test-utils/template-strings.spec.ts | 4 +--
.../tree/src/tree/tree-functions.spec.ts | 19 +++++++----
.../tree/src/tree/tree.spec.ts | 4 +--
7 files changed, 36 insertions(+), 49 deletions(-)
diff --git a/projects/igniteui-angular/test-utils/calendar-helper-utils.ts b/projects/igniteui-angular/test-utils/calendar-helper-utils.ts
index 324a4baef13..12da67f4789 100644
--- a/projects/igniteui-angular/test-utils/calendar-helper-utils.ts
+++ b/projects/igniteui-angular/test-utils/calendar-helper-utils.ts
@@ -1,5 +1,6 @@
import { ComponentFixture } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
+import { expect } from 'vitest';
export class HelperTestFunctions {
public static DAYS_VIEW = 'igx-days-view';
diff --git a/projects/igniteui-angular/test-utils/grid-base-components.spec.ts b/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
index 8606601b961..cecab517173 100644
--- a/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
+++ b/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
@@ -126,15 +126,13 @@ export class SelectionComponent extends BasicGridComponent {
}
@Component({
- template: GridTemplateStrings.declareGrid(` [autoGenerate]="true" [exportExcel]="exportExcel" [exportCsv]="exportCsv"`, '', ''),
+ template: GridTemplateStrings.declareGrid(` [autoGenerate]="true"`, '', ''),
imports: [IgxGridComponent]
})
export class GridWithToolbarComponent extends GridWithSizeComponent {
public showToolbar = true;
public columnHiding = true;
public columnPinning = true;
- public exportExcel = true;
- public exportCsv = true;
public override data = SampleTestData.contactInfoData();
}
diff --git a/projects/igniteui-angular/test-utils/grid-functions.spec.ts b/projects/igniteui-angular/test-utils/grid-functions.spec.ts
index 970373f75ac..03e3a43b58b 100644
--- a/projects/igniteui-angular/test-utils/grid-functions.spec.ts
+++ b/projects/igniteui-angular/test-utils/grid-functions.spec.ts
@@ -307,29 +307,29 @@ export class GridFunctions {
}
public static verifyColumnIsHidden(column, isHidden: boolean, visibleColumnsCount: number) {
- expect(column.hidden).toBe(isHidden, 'Hidden is not ' + isHidden);
+ expect(column.hidden, 'Hidden is not ' + isHidden).toBe(isHidden);
const visibleColumns = column.grid.visibleColumns;
- expect(visibleColumns.length).toBe(visibleColumnsCount, 'Unexpected visible columns count!');
- expect(visibleColumns.findIndex((col) => col === column) > -1).toBe(!isHidden, 'Unexpected result for visibleColumns collection!');
+ expect(visibleColumns.length, 'Unexpected visible columns count!').toBe(visibleColumnsCount);
+ expect(visibleColumns.findIndex((col) => col === column) > -1, 'Unexpected result for visibleColumns collection!').toBe(!isHidden);
}
public static verifyColumnsAreHidden(columns, isHidden: boolean, visibleColumnsCount: number) {
const visibleColumns = columns[0].grid.visibleColumns;
columns.forEach(column => {
- expect(column.hidden).toBe(isHidden, 'Hidden is not ' + isHidden);
- expect(visibleColumns.findIndex((col) => col === column) > -1)
- .toBe(!isHidden, 'Unexpected result for visibleColumns collection!');
+ expect(column.hidden, 'Hidden is not ' + isHidden).toBe(isHidden);
+ expect(visibleColumns.findIndex((col) => col === column) > -1, 'Unexpected result for visibleColumns collection!')
+ .toBe(!isHidden);
});
- expect(visibleColumns.length).toBe(visibleColumnsCount, 'Unexpected visible columns count!');
+ expect(visibleColumns.length, 'Unexpected visible columns count!').toBe(visibleColumnsCount);
}
public static verifyColumnIsPinned(column, isPinned: boolean, pinnedColumnsCount: number) {
- expect(column.pinned).toBe(isPinned, 'Pinned is not ' + isPinned);
+ expect(column.pinned, 'Pinned is not ' + isPinned).toBe(isPinned);
const pinnedColumns = column.grid.pinnedColumns;
- expect(pinnedColumns.length).toBe(pinnedColumnsCount, 'Unexpected pinned columns count!');
- expect(pinnedColumns.findIndex((col) => col === column) > -1).toBe(isPinned, 'Unexpected result for pinnedColumns collection!');
+ expect(pinnedColumns.length, 'Unexpected pinned columns count!').toBe(pinnedColumnsCount);
+ expect(pinnedColumns.findIndex((col) => col === column) > -1, 'Unexpected result for pinnedColumns collection!').toBe(isPinned);
}
public static verifyUnpinnedAreaWidth(grid: GridType, expectedWidth: number, includeScrollWidth = true) {
diff --git a/projects/igniteui-angular/test-utils/helper-utils.spec.ts b/projects/igniteui-angular/test-utils/helper-utils.spec.ts
index bbe987a47f7..d0817399635 100644
--- a/projects/igniteui-angular/test-utils/helper-utils.spec.ts
+++ b/projects/igniteui-angular/test-utils/helper-utils.spec.ts
@@ -7,16 +7,14 @@ import { expect, beforeEach, afterEach, vi } from 'vitest';
/**
* Global beforeEach and afterEach checks to ensure test fails on specific warnings
- * Use direct env because karma-parallel's wrap ignores these in secondary shards
- * https://github.com/joeljeske/karma-parallel/issues/64
+ * Note: Vitest doesn't support global hooks like Jasmine's getEnv().
+ * These checks should be implemented in individual test suites as needed.
*/
-// TODO: vitest-migration: Unsupported jasmine property "getEnv" found. Please migrate this manually.
-(jasmine.getEnv() as any).beforeEach(() => {
+beforeEach(() => {
vi.spyOn(console, 'warn');
});
-// TODO: vitest-migration: Unsupported jasmine property "getEnv" found. Please migrate this manually.
-(jasmine.getEnv() as any).afterEach(() => {
+afterEach(() => {
expect(console.warn, 'Components & tests should be free of @for track duplicated keys warnings').not.toHaveBeenCalledWith(expect.stringContaining('NG0955'));
expect(console.warn, 'Components & tests should be free of @for track DOM re-creation warnings').not.toHaveBeenCalledWith(expect.stringContaining('NG0956'));
});
@@ -104,26 +102,9 @@ export class TestNgZone extends NgZone {
/* eslint-disable no-console */
// TODO: enable on re-run by selecting enable debug logging
// https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/enabling-debug-logging
+// Note: Vitest uses a different reporter system. Custom reporters should be configured in vitest.config.ts
const shardLogging = false;
if (shardLogging) {
- const myReporter = {
- suiteStarted: function (result) {
- const id = new URLSearchParams(window.parent.location.search).get('id');
- console.log(`[${id}] Suite started: ${result.fullName}`);
- },
- suiteDone: function (result) {
- const id = new URLSearchParams(window.parent.location.search).get('id');
- console.log(`[${id}] Suite: ${result.fullName} has ${result.status}`);
- for (const expectation of result.failedExpectations) {
- console.log('Suite ' + expectation.message);
- console.log(expectation.stack);
- }
- var memory = (performance as any).memory;
- console.log(`[${id}] totalJSHeapSize: ${memory['totalJSHeapSize']} usedJSHeapSize: ${memory['usedJSHeapSize']} jsHeapSizeLimit: ${memory['jsHeapSizeLimit']}`);
- if (memory['totalJSHeapSize'] >= memory['jsHeapSizeLimit'])
- console.log('--------------------Heap Size limit reached!!!-------------------');
- },
- };
- // TODO: vitest-migration: Unsupported jasmine property "getEnv" found. Please migrate this manually.
- jasmine.getEnv().addReporter(myReporter);
+ // Vitest reporter configuration should be done in vitest.config.ts, not at runtime
+ console.log('Shard logging is enabled. Configure custom reporters in vitest.config.ts');
}
diff --git a/projects/igniteui-angular/test-utils/template-strings.spec.ts b/projects/igniteui-angular/test-utils/template-strings.spec.ts
index a6d8f7e03cc..91801e23d5e 100644
--- a/projects/igniteui-angular/test-utils/template-strings.spec.ts
+++ b/projects/igniteui-angular/test-utils/template-strings.spec.ts
@@ -368,9 +368,9 @@ export class ColumnDefinitions {
+ [resizable]="true">
+ [editable]="true">
diff --git a/projects/igniteui-angular/tree/src/tree/tree-functions.spec.ts b/projects/igniteui-angular/tree/src/tree/tree-functions.spec.ts
index 3b313673b28..7a5a2b1d53a 100644
--- a/projects/igniteui-angular/tree/src/tree/tree-functions.spec.ts
+++ b/projects/igniteui-angular/tree/src/tree/tree-functions.spec.ts
@@ -70,17 +70,24 @@ export class TreeTestFunctions {
public static createNodeSpy(properties: {
[key: string]: any;
} = null, methodNames: (keyof IgxTreeNode)[] = ['selected']): MockedObject> {
- if (!properties) {
- // TODO: vitest-migration: Cannot transform jasmine.createSpyObj with a dynamic variable. Please migrate this manually. See: https://vitest.dev/api/vi.html#vi-fn
- return jasmine.createSpyObj>(methodNames);
+ const spy: any = {};
+
+ // Create mock functions for each method name
+ methodNames.forEach(methodName => {
+ spy[methodName] = vi.fn().mockName(String(methodName));
+ });
+
+ // Add properties if provided
+ if (properties) {
+ Object.assign(spy, properties);
}
- // TODO: vitest-migration: Cannot transform jasmine.createSpyObj with a dynamic variable. Please migrate this manually. See: https://vitest.dev/api/vi.html#vi-fn
- return jasmine.createSpyObj>(methodNames, properties);
+
+ return spy as MockedObject>;
}
public static createNodeSpies(level: number, count: number, parentNode?: IgxTreeNodeComponent, children?: any[], allChildren?: any[]): IgxTreeNodeComponent[] {
const nodesArr = [];
- const mockEmitter: EventEmitter = {
+ const mockEmitter: any = {
emit: vi.fn().mockName("emitter.emit")
};
for (let i = 0; i < count; i++) {
diff --git a/projects/igniteui-angular/tree/src/tree/tree.spec.ts b/projects/igniteui-angular/tree/src/tree/tree.spec.ts
index bb35a6ed621..c3598a1086f 100644
--- a/projects/igniteui-angular/tree/src/tree/tree.spec.ts
+++ b/projects/igniteui-angular/tree/src/tree/tree.spec.ts
@@ -690,8 +690,8 @@ describe('IgxTree #treeView', () => {
unsub$.complete();
}));
- it('Should collapse all sibling nodes when `singleBranchExpand` is set and node is toggled', fakeAsync(() => {
- pending('Causes jasmine to hang');
+ it.skip('Should collapse all sibling nodes when `singleBranchExpand` is set and node is toggled', fakeAsync(() => {
+ // Skipped: Causes the test runner to hang
tree.rootNodes.forEach((n, index) => index > 0 ? n.expanded = true : n.expanded = false);
fix.detectChanges();
expect(tree.nodes.filter(n => n.expanded).length).toBe(4);
From fd8b3a61d1b4b830eb732c4236371f86abad8c28 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 21 Jan 2026 17:29:06 +0000
Subject: [PATCH 3/4] fix(tests): fix type errors in grid test components
- Add GridPagingMode import and use GridPagingMode.Remote for RemotePagingComponent
- Add GridSelectionMode import and use GridSelectionMode.none for MovableColumnsComponent
- Add GridColumnDataType import and properly type columns in IgxGridAdvancedFilteringDynamicColumnsComponent
Co-authored-by: ChronosSF <2188411+ChronosSF@users.noreply.github.com>
---
.../test-utils/grid-base-components.spec.ts | 3 ++-
.../test-utils/grid-samples.spec.ts | 18 ++++++++++--------
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/projects/igniteui-angular/test-utils/grid-base-components.spec.ts b/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
index cecab517173..11e4a39e639 100644
--- a/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
+++ b/projects/igniteui-angular/test-utils/grid-base-components.spec.ts
@@ -4,6 +4,7 @@ import { ColumnDefinitions, GridTemplateStrings } from './template-strings.spec'
import { IgxPaginatorComponent } from 'igniteui-angular/paginator';
import { IgxGridComponent } from 'igniteui-angular/grids/grid';
import { IgxCellTemplateDirective, IgxColumnActionsComponent, IgxColumnComponent, IgxColumnGroupComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, IgxGridToolbarActionsComponent, IgxGridToolbarComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent } from 'igniteui-angular/grids/core';
+import { GridPagingMode } from 'igniteui-angular/grids/core';
@Component({
template: `
@@ -111,7 +112,7 @@ export class PagingComponent extends GridWithSizeComponent {
imports: [IgxGridComponent, IgxColumnComponent, IgxPaginatorComponent]
})
export class RemotePagingComponent extends GridWithSizeComponent {
- public pagingMode = 'remote';
+ public pagingMode: GridPagingMode = GridPagingMode.Remote;
public perPage = 3;
public totalRecords = 10;
public override data = SampleTestData.personJobDataFull();
diff --git a/projects/igniteui-angular/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/test-utils/grid-samples.spec.ts
index c1e29945838..d161b5b7dc0 100644
--- a/projects/igniteui-angular/test-utils/grid-samples.spec.ts
+++ b/projects/igniteui-angular/test-utils/grid-samples.spec.ts
@@ -6,6 +6,7 @@ import { SampleTestData, DataParent } from './sample-test-data.spec';
import { ColumnDefinitions, GridTemplateStrings, EventSubscriptions, TemplateDefinitions, ExternalTemplateDefinitions } from './template-strings.spec';
import { ColumnPinningPosition, ColumnType, FilteringExpressionsTree, FilteringLogic, FilteringStrategy, FormattedValuesSortingStrategy, IDataCloneStrategy, IFilteringExpressionsTree, IgxFilteringOperand, IgxFilterItem, IgxNumberFilteringOperand, IgxSummaryResult, ISortingOptions, ISortingStrategy, OverlaySettings, SortingDirection } from 'igniteui-angular/core';
+import { GridColumnDataType } from 'igniteui-angular/core';
import { IgxActionStripComponent } from 'igniteui-angular/action-strip';
import { IgxPaginatorComponent } from 'igniteui-angular/paginator';
import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -14,6 +15,7 @@ import { IgxCheckboxComponent } from 'igniteui-angular/checkbox';
import { IgxButtonDirective, IgxFocusDirective } from 'igniteui-angular/directives';
import { IgxGridComponent } from 'igniteui-angular/grids/grid';
import { CellType, IGridCellEventArgs, IgxAdvancedFilteringDialogComponent, IgxCellEditorTemplateDirective, IgxCellHeaderTemplateDirective, IgxCellTemplateDirective, IgxCollapsibleIndicatorTemplateDirective, IgxColumnComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent, IgxDateSummaryOperand, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleFilterOperationsTemplateDirective, IgxExcelStyleHeaderIconDirective, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleSearchComponent, IgxExcelStyleSelectingComponent, IgxFilterCellTemplateDirective, IgxGridEditingActionsComponent, IgxGridExcelStyleFilteringComponent, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarHidingComponent, IgxGroupByRowSelectorDirective, IgxHeadSelectorDirective, IgxNumberSummaryOperand, IgxRowAddTextDirective, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowSelectorDirective, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective } from 'igniteui-angular/grids/core';
+import { GridSelectionMode } from 'igniteui-angular/grids/core';
@Component({
template: GridTemplateStrings.declareGrid('', '', ``),
@@ -389,7 +391,7 @@ export class GridHireDateComponent extends BasicGridComponent {
export class MovableColumnsComponent extends BasicGridComponent {
public override data = SampleTestData.personIDNameRegionData();
public autoGenerate = false;
- public rowSelection = 'none';
+ public rowSelection: GridSelectionMode = GridSelectionMode.none;
public isFilterable = false;
public isSortable = false;
public isResizable = false;
@@ -1138,16 +1140,16 @@ export class IgxGridAdvancedFilteringWithToolbarComponent extends BasicGridCompo
})
export class IgxGridAdvancedFilteringDynamicColumnsComponent extends BasicGridComponent implements OnInit {
public override data = [];
- public columns = [];
+ public columns: Array<{ field: string; header: string; width: string; type: GridColumnDataType }> = [];
public ngOnInit(): void {
this.columns = [
- { field: 'ID', header: 'HeaderID', width: '100px', type: 'number' },
- { field: 'ProductName', header: 'Product Name', width: '200px', type: 'string' },
- { field: 'Downloads', header: 'Downloads', width: '100px', type: 'number' },
- { field: 'Released', header: 'Released', width: '100px', type: 'boolean' },
- { field: 'ReleaseDate', header: 'Release Date', width: '200px', type: 'date' },
- { field: 'AnotherField', header: 'Another Field', width: '200px', type: 'string' },
+ { field: 'ID', header: 'HeaderID', width: '100px', type: GridColumnDataType.Number },
+ { field: 'ProductName', header: 'Product Name', width: '200px', type: GridColumnDataType.String },
+ { field: 'Downloads', header: 'Downloads', width: '100px', type: GridColumnDataType.Number },
+ { field: 'Released', header: 'Released', width: '100px', type: GridColumnDataType.Boolean },
+ { field: 'ReleaseDate', header: 'Release Date', width: '200px', type: GridColumnDataType.Date },
+ { field: 'AnotherField', header: 'Another Field', width: '200px', type: GridColumnDataType.String },
];
this.data = SampleTestData.excelFilteringData();
}
From 037df6038695416d5c4fabeee519c0e3853f40c8 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 21 Jan 2026 17:30:12 +0000
Subject: [PATCH 4/4] fix(tests): add missing properties to grid test
components
- Add isEditable, isHidden, isGroupable to MovableTemplatedColumnsComponent
- Add paging property to MovableColumnsLargeComponent
Co-authored-by: ChronosSF <2188411+ChronosSF@users.noreply.github.com>
---
projects/igniteui-angular/test-utils/grid-samples.spec.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/projects/igniteui-angular/test-utils/grid-samples.spec.ts b/projects/igniteui-angular/test-utils/grid-samples.spec.ts
index d161b5b7dc0..ebc4dc52593 100644
--- a/projects/igniteui-angular/test-utils/grid-samples.spec.ts
+++ b/projects/igniteui-angular/test-utils/grid-samples.spec.ts
@@ -441,6 +441,9 @@ export class MovableTemplatedColumnsComponent extends BasicGridComponent {
public isFilterable = false;
public isSortable = false;
public isResizable = false;
+ public isEditable = false;
+ public isHidden = false;
+ public isGroupable = false;
}
@Component({
@@ -453,6 +456,7 @@ export class MovableColumnsLargeComponent extends GridAutoGenerateComponent {
public width = '500px';
public height = '400px';
+ public paging = false;
public columnInit(column: IgxColumnComponent) {
column.sortable = true;