Skip to content

Commit fd3bead

Browse files
spike-rabbitspliffone
authored andcommitted
test(element-ng): migrate r to vitest
1 parent 087a0ba commit fd3bead

13 files changed

+66
-117
lines changed

angular.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@
170170
"buildTarget": "element-ng:test-target",
171171
"browsers": ["chromium"],
172172
"browserViewport": "1280x720",
173-
"exclude": ["[n-r]*/**", "schematics/**"],
173+
"exclude": ["[n-q]*/**", "schematics/**"],
174174
"runnerConfig": true
175175
}
176176
},
@@ -179,7 +179,7 @@
179179
"options": {
180180
"tsConfig": "projects/element-ng/tsconfig.spec.json",
181181
"karmaConfig": "projects/element-ng/karma.conf.cjs",
182-
"exclude": ["**/[a-ms-z]*/**", "schematics/**", "**/*.vitest.spec.ts"],
182+
"exclude": ["**/[a-mr-z]*/**", "schematics/**", "**/*.vitest.spec.ts"],
183183
"assets": [
184184
{
185185
"glob": "**/*",

projects/element-ng/auto-collapsable-list/si-auto-collapsable-list.directive.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
MockResizeObserver,
1010
mockResizeObserver,
1111
restoreResizeObserver
12-
} from '../resize-observer/mock-resize-observer.vitest.spec';
12+
} from '../resize-observer/testing/resize-observer.mock';
1313
import { SiAutoCollapsableListItemDirective } from './si-auto-collapsable-list-item.directive';
1414
import { SiAutoCollapsableListModule } from './si-auto-collapsable-list.module';
1515

projects/element-ng/breadcrumb/si-breadcrumb.component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
mockResizeObserver,
1919
MockResizeObserver,
2020
restoreResizeObserver
21-
} from '../resize-observer/mock-resize-observer.vitest.spec';
21+
} from '../resize-observer/testing/resize-observer.mock';
2222
import { BreadcrumbItem } from './breadcrumb-item.model';
2323

2424
const TEST_ITEMS = [

projects/element-ng/resize-observer/mock-resize-observer.spec.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

projects/element-ng/resize-observer/resize-observer.service.spec.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
import { Component, ElementRef, signal, viewChild } from '@angular/core';
66
import { ComponentFixture, TestBed } from '@angular/core/testing';
77
import { Subscription } from 'rxjs';
8+
import { Mock } from 'vitest';
89

10+
import { ElementDimensions, ResizeObserverService } from './resize-observer.service';
911
import {
1012
MockResizeObserver,
1113
mockResizeObserver,
1214
restoreResizeObserver
13-
} from './mock-resize-observer.spec';
14-
import { ElementDimensions, ResizeObserverService } from './resize-observer.service';
15+
} from './testing/resize-observer.mock';
1516

1617
@Component({
1718
template: `<div #theDiv [style.width.px]="width()" [style.height.px]="height()">Testli</div>`
@@ -33,7 +34,7 @@ describe('ResizeObserverService', () => {
3334
let component: TestHostComponent;
3435
let service: ResizeObserverService;
3536
let subscription: Subscription;
36-
let spy: jasmine.Spy<(dim: ElementDimensions) => void>;
37+
let spy: Mock<(dim: ElementDimensions) => void>;
3738

3839
const subscribe = (initial: boolean): void => {
3940
subscription = service
@@ -56,7 +57,7 @@ describe('ResizeObserverService', () => {
5657
component = fixture.componentInstance;
5758
fixture.detectChanges();
5859

59-
spy = jasmine.createSpy();
60+
spy = vi.fn();
6061
});
6162

6263
afterEach(() => {
@@ -67,7 +68,7 @@ describe('ResizeObserverService', () => {
6768
it('emits initial size event when asked', async () => {
6869
subscribe(true);
6970
await timeout(10);
70-
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({ width: 100, height: 100 }));
71+
expect(spy).toHaveBeenCalledWith(expect.objectContaining({ width: 100, height: 100 }));
7172
});
7273

7374
it('emits no initial size event when not asked', async () => {
@@ -87,7 +88,7 @@ describe('ResizeObserverService', () => {
8788
expect(spy).not.toHaveBeenCalled();
8889

8990
await timeout(150);
90-
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({ width: 200, height: 100 }));
91+
expect(spy).toHaveBeenCalledWith(expect.objectContaining({ width: 200, height: 100 }));
9192
}
9293
});
9394

@@ -102,7 +103,7 @@ describe('ResizeObserverService', () => {
102103
expect(spy).not.toHaveBeenCalled();
103104

104105
await timeout(150);
105-
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({ width: 100, height: 200 }));
106+
expect(spy).toHaveBeenCalledWith(expect.objectContaining({ width: 100, height: 200 }));
106107
}
107108
});
108109

@@ -111,20 +112,20 @@ describe('ResizeObserverService', () => {
111112

112113
// Skip test when browser is not focussed to prevent failures.
113114
if (document.hasFocus()) {
114-
const spy2: jasmine.Spy<(dim: ElementDimensions) => void> = jasmine.createSpy();
115+
const spy2: Mock<(dim: ElementDimensions) => void> = vi.fn();
115116
const subs2 = service
116117
.observe(component.theDiv().nativeElement, 50, true)
117118
.subscribe(dim => spy2(dim));
118119

119120
await timeout(20);
120-
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({ width: 100, height: 100 }));
121-
expect(spy2).toHaveBeenCalledWith(jasmine.objectContaining({ width: 100, height: 100 }));
121+
expect(spy).toHaveBeenCalledWith(expect.objectContaining({ width: 100, height: 100 }));
122+
expect(spy2).toHaveBeenCalledWith(expect.objectContaining({ width: 100, height: 100 }));
122123

123124
detectSizeChange(200, 100);
124125

125126
await timeout(150);
126-
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({ width: 200, height: 100 }));
127-
expect(spy2).toHaveBeenCalledWith(jasmine.objectContaining({ width: 200, height: 100 }));
127+
expect(spy).toHaveBeenCalledWith(expect.objectContaining({ width: 200, height: 100 }));
128+
expect(spy2).toHaveBeenCalledWith(expect.objectContaining({ width: 200, height: 100 }));
128129

129130
subs2.unsubscribe();
130131
}

projects/element-ng/resize-observer/si-resize-observer.directive.spec.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
*/
55
import { Component, ElementRef, signal, viewChild } from '@angular/core';
66
import { ComponentFixture, TestBed } from '@angular/core/testing';
7+
import { MockInstance } from 'vitest';
78

89
import { ElementDimensions } from './index';
10+
import { SiResizeObserverDirective } from './si-resize-observer.directive';
911
import {
1012
MockResizeObserver,
1113
mockResizeObserver,
1214
restoreResizeObserver
13-
} from './mock-resize-observer.spec';
14-
import { SiResizeObserverDirective } from './si-resize-observer.directive';
15+
} from './testing/resize-observer.mock';
1516

1617
@Component({
1718
imports: [SiResizeObserverDirective],
@@ -39,7 +40,7 @@ class TestHostComponent {
3940
describe('SiResizeObserverDirective', () => {
4041
let fixture: ComponentFixture<TestHostComponent>;
4142
let component: TestHostComponent;
42-
let spy: jasmine.Spy<(dim: ElementDimensions) => void>;
43+
let spy: MockInstance;
4344

4445
const detectSizeChange = (inlineSize: number = 100, blockSize: number = 100): void => {
4546
component.width.set(inlineSize);
@@ -50,49 +51,44 @@ describe('SiResizeObserverDirective', () => {
5051
};
5152

5253
beforeEach(() => {
54+
vi.useFakeTimers();
5355
mockResizeObserver();
5456
fixture = TestBed.createComponent(TestHostComponent);
5557
component = fixture.componentInstance;
56-
spy = spyOn(component, 'resizeHandler');
58+
spy = vi.spyOn(component, 'resizeHandler');
5759
});
5860

59-
beforeEach(() => jasmine.clock().install());
60-
6161
afterEach(() => {
62+
spy.mockClear();
6263
restoreResizeObserver();
63-
jasmine.clock().uninstall();
64+
vi.useRealTimers();
6465
});
6566

6667
it('emits initial size event', async () => {
6768
fixture.detectChanges();
68-
jasmine.clock().tick(100);
69+
vi.advanceTimersByTime(100);
6970
await fixture.whenStable();
7071
expect(component.resizeHandler).toHaveBeenCalledWith({ width: 100, height: 100 });
7172
});
7273

7374
it('emits on width change', async () => {
74-
// not interested in the initial event
75-
spy.calls.reset();
7675
detectSizeChange(200, 100);
7776

7877
expect(component.resizeHandler).not.toHaveBeenCalled();
7978

80-
jasmine.clock().tick(100);
79+
vi.advanceTimersByTime(100);
8180
fixture.detectChanges();
8281
await fixture.whenStable();
8382

8483
expect(component.resizeHandler).toHaveBeenCalledWith({ width: 200, height: 100 });
8584
});
8685

8786
it('emits on height change', async () => {
88-
// not interested in the initial event
89-
spy.calls.reset();
90-
9187
detectSizeChange(100, 200);
9288

9389
expect(component.resizeHandler).not.toHaveBeenCalled();
9490

95-
jasmine.clock().tick(100);
91+
vi.advanceTimersByTime(100);
9692
fixture.detectChanges();
9793
await fixture.whenStable();
9894

@@ -103,16 +99,20 @@ describe('SiResizeObserverDirective', () => {
10399
describe('SiResizeObserverDirective with emitInitial=false', () => {
104100
let fixture: ComponentFixture<TestHostComponent>;
105101
let component: TestHostComponent;
106-
let spy: jasmine.Spy<(dim: ElementDimensions) => void>;
102+
let spy: MockInstance;
107103

108104
beforeEach(() => {
109105
fixture = TestBed.createComponent(TestHostComponent);
110106
component = fixture.componentInstance;
111107
component.emitInitial = false;
112-
spy = spyOn(component, 'resizeHandler');
108+
spy = vi.spyOn(component, 'resizeHandler');
113109
fixture.detectChanges();
114110
});
115111

112+
afterEach(() => {
113+
spy.mockClear();
114+
});
115+
116116
it('does not emit initial size event', () => {
117117
expect(spy).not.toHaveBeenCalled();
118118
});

projects/element-ng/resize-observer/si-responsive-container.directive.spec.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
MockResizeObserver,
1111
mockResizeObserver,
1212
restoreResizeObserver
13-
} from './mock-resize-observer.spec';
13+
} from './testing/resize-observer.mock';
1414

1515
@Component({
1616
imports: [SiResponsiveContainerDirective],
@@ -44,17 +44,17 @@ describe('SiResponsiveContainerDirective', () => {
4444
afterEach(() => restoreResizeObserver());
4545

4646
const testSize = async (size: number, clazz: string): Promise<void> => {
47-
jasmine.clock().install();
47+
vi.useFakeTimers();
4848
component.width.set(size);
4949
fixture.detectChanges();
5050
MockResizeObserver.triggerResize({});
5151

52-
jasmine.clock().tick(100);
52+
vi.advanceTimersByTime(100);
5353
fixture.detectChanges();
5454
await fixture.whenStable();
5555

56-
expect(element.querySelector<HTMLElement>('div')!.className).toBe(clazz);
57-
jasmine.clock().uninstall();
56+
expect(element.querySelector<HTMLElement>('div')!).toHaveClass(clazz);
57+
vi.useRealTimers();
5858
};
5959

6060
it('sets correct si-container-* class', async () => {

projects/element-ng/resize-observer/mock-resize-observer.vitest.spec.ts renamed to projects/element-ng/resize-observer/testing/resize-observer.mock.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,42 @@ export const restoreResizeObserver = (): void => {
2626
export class MockResizeObserver {
2727
static instance: MockResizeObserver;
2828
private callback: ResizeObserverCallback;
29+
/** @defaultValue [] */
2930
observed: [Element, ResizeObserverOptions | undefined][] = [];
3031

3132
constructor(callback: ResizeObserverCallback) {
3233
this.callback = callback;
3334
MockResizeObserver.instance = this;
3435
}
3536

37+
/**
38+
* @defaultValue
39+
* ```
40+
* vi.fn(() => (this.observed = []))
41+
* ```
42+
*/
3643
disconnect = vi.fn(() => (this.observed = []));
3744

45+
/**
46+
* @defaultValue
47+
* ```
48+
* vi.fn((target: Element, options?: ResizeObserverOptions) =>
49+
this.observed.push([target, options])
50+
)
51+
* ```
52+
*/
3853
observe = vi.fn((target: Element, options?: ResizeObserverOptions) =>
3954
this.observed.push([target, options])
4055
);
4156

57+
/**
58+
* @defaultValue
59+
* ```
60+
* vi.fn(
61+
(target: Element) => (this.observed = this.observed.filter(x => x[0] !== target))
62+
)
63+
* ```
64+
*/
4265
unobserve = vi.fn(
4366
(target: Element) => (this.observed = this.observed.filter(x => x[0] !== target))
4467
);

projects/element-ng/status-bar/si-status-bar.component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
MockResizeObserver,
1010
mockResizeObserver,
1111
restoreResizeObserver
12-
} from '../resize-observer/mock-resize-observer.vitest.spec';
12+
} from '../resize-observer/testing/resize-observer.mock';
1313
import { runOnPushChangeDetection } from '../test-helpers';
1414
import { SiStatusBarComponent, StatusBarItem } from './index';
1515

projects/element-ng/tabs/si-tabset.component.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
MockResizeObserver,
1313
mockResizeObserver,
1414
restoreResizeObserver
15-
} from '../resize-observer/mock-resize-observer.vitest.spec';
15+
} from '../resize-observer/testing/resize-observer.mock';
1616
import { SiTabLinkComponent } from './si-tab-link.component';
1717
import { SiTabPortalComponent } from './si-tab-portal.component';
1818
import { SiTabComponent } from './si-tab.component';

0 commit comments

Comments
 (0)