@leaflink/dom-testing-utils 5.2.0 → 5.2.2
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/dist/mocks/IntersectionObserverMock.d.ts +23 -0
- package/dist/mocks/IntersectionObserverMock.js +72 -0
- package/dist/mocks/IntersectionObserverMock.js.map +1 -0
- package/dist/mocks/LocationMock.d.ts +6 -0
- package/dist/mocks/LocationMock.js +70 -0
- package/dist/mocks/LocationMock.js.map +1 -0
- package/dist/mocks/MutationObserverMock.d.ts +7 -0
- package/dist/mocks/MutationObserverMock.js +15 -0
- package/dist/mocks/MutationObserverMock.js.map +1 -0
- package/dist/mocks/ResizeObserverMock.d.ts +7 -0
- package/dist/mocks/ResizeObserverMock.js +13 -0
- package/dist/mocks/ResizeObserverMock.js.map +1 -0
- package/dist/mocks/matchMediaMock.d.ts +5 -0
- package/dist/mocks/matchMediaMock.js +15 -0
- package/dist/mocks/matchMediaMock.js.map +1 -0
- package/dist/setup-env.js +36 -70
- package/dist/setup-env.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface IntersectionObserverMock extends IntersectionObserver {
|
|
2
|
+
target: Element | null;
|
|
3
|
+
scrollCallback: IntersectionObserverCallback;
|
|
4
|
+
onScroll(e: Event): void;
|
|
5
|
+
}
|
|
6
|
+
export declare class IntersectionObserverMock implements IntersectionObserverMock {
|
|
7
|
+
root: IntersectionObserver['root'];
|
|
8
|
+
rootMargin: IntersectionObserver['rootMargin'];
|
|
9
|
+
thresholds: IntersectionObserver['thresholds'];
|
|
10
|
+
target: Element | null;
|
|
11
|
+
disconnect: IntersectionObserver['disconnect'];
|
|
12
|
+
observe: IntersectionObserver['observe'];
|
|
13
|
+
takeRecords: IntersectionObserver['takeRecords'];
|
|
14
|
+
unobserve: IntersectionObserver['unobserve'];
|
|
15
|
+
scrollCallback: IntersectionObserverCallback;
|
|
16
|
+
constructor(callback: IntersectionObserverCallback);
|
|
17
|
+
}
|
|
18
|
+
export declare function mockIntersectionObserver(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Dispatches the custom scroll event used by the viewable directive. Used
|
|
21
|
+
* in tandem with the IntersectionObserverMock to perform the scroll.
|
|
22
|
+
*/
|
|
23
|
+
export declare function dispatchCustomScroll(eventDetails?: Partial<IntersectionObserverEntry>): void;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export class IntersectionObserverMock {
|
|
2
|
+
root = null;
|
|
3
|
+
rootMargin = '0px 0px 0px 0px';
|
|
4
|
+
thresholds = [];
|
|
5
|
+
target = null;
|
|
6
|
+
disconnect = IntersectionObserverMock.prototype.disconnect.bind(this);
|
|
7
|
+
observe = IntersectionObserverMock.prototype.observe.bind(this);
|
|
8
|
+
takeRecords = IntersectionObserverMock.prototype.takeRecords.bind(this);
|
|
9
|
+
unobserve = IntersectionObserverMock.prototype.unobserve.bind(this);
|
|
10
|
+
scrollCallback;
|
|
11
|
+
onScroll(e) {
|
|
12
|
+
if (!(e instanceof CustomEvent)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const { detail } = e;
|
|
16
|
+
this.scrollCallback([
|
|
17
|
+
{
|
|
18
|
+
intersectionRatio: detail.intersectionRatio,
|
|
19
|
+
isIntersecting: detail.isIntersecting,
|
|
20
|
+
},
|
|
21
|
+
], new IntersectionObserverMock(this.scrollCallback));
|
|
22
|
+
}
|
|
23
|
+
constructor(callback) {
|
|
24
|
+
this.scrollCallback = callback;
|
|
25
|
+
window.addEventListener('scroll', this.onScroll.bind(this));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function mockIntersectionObserver() {
|
|
29
|
+
IntersectionObserverMock.prototype.disconnect = vi.fn(function () { });
|
|
30
|
+
IntersectionObserverMock.prototype.observe = vi.fn(function (element) {
|
|
31
|
+
this.target = element;
|
|
32
|
+
});
|
|
33
|
+
IntersectionObserverMock.prototype.takeRecords = vi.fn(function () {
|
|
34
|
+
return [];
|
|
35
|
+
});
|
|
36
|
+
IntersectionObserverMock.prototype.unobserve = vi.fn(function () {
|
|
37
|
+
this.target = null;
|
|
38
|
+
window.removeEventListener('scroll', this.onScroll);
|
|
39
|
+
});
|
|
40
|
+
vi.stubGlobal('IntersectionObserver', IntersectionObserverMock);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Dispatches the custom scroll event used by the viewable directive. Used
|
|
44
|
+
* in tandem with the IntersectionObserverMock to perform the scroll.
|
|
45
|
+
*/
|
|
46
|
+
export function dispatchCustomScroll(eventDetails) {
|
|
47
|
+
const MOCK_DOM_RECT = {
|
|
48
|
+
bottom: 0,
|
|
49
|
+
height: 0,
|
|
50
|
+
left: 0,
|
|
51
|
+
right: 0,
|
|
52
|
+
top: 0,
|
|
53
|
+
width: 0,
|
|
54
|
+
x: 0,
|
|
55
|
+
y: 0,
|
|
56
|
+
toJSON: () => null,
|
|
57
|
+
};
|
|
58
|
+
const detail = {
|
|
59
|
+
boundingClientRect: MOCK_DOM_RECT,
|
|
60
|
+
intersectionRatio: 1,
|
|
61
|
+
intersectionRect: MOCK_DOM_RECT,
|
|
62
|
+
isIntersecting: true,
|
|
63
|
+
rootBounds: null,
|
|
64
|
+
target: document.body,
|
|
65
|
+
time: 0,
|
|
66
|
+
...eventDetails,
|
|
67
|
+
};
|
|
68
|
+
window.dispatchEvent(new CustomEvent('scroll', {
|
|
69
|
+
detail,
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=IntersectionObserverMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IntersectionObserverMock.js","sourceRoot":"src/","sources":["mocks/IntersectionObserverMock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type RawLocation = Pick<Location, 'hash' | 'host' | 'hostname' | 'href' | 'origin' | 'pathname' | 'search'>;
|
|
2
|
+
/**
|
|
3
|
+
* Mocks the global location object with the provided location object. Defaults to window.location.
|
|
4
|
+
*/
|
|
5
|
+
export declare function mockLocation(location?: Partial<RawLocation>): void;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const originalLocation = window.location;
|
|
2
|
+
/**
|
|
3
|
+
* Mocks the global location object with the provided location object. Defaults to window.location.
|
|
4
|
+
*/
|
|
5
|
+
export function mockLocation(location) {
|
|
6
|
+
const locationMock = Object.defineProperties({}, {
|
|
7
|
+
...Object.getOwnPropertyDescriptors(originalLocation),
|
|
8
|
+
assign: {
|
|
9
|
+
configurable: true,
|
|
10
|
+
value: vi.fn(),
|
|
11
|
+
},
|
|
12
|
+
reload: {
|
|
13
|
+
configurable: true,
|
|
14
|
+
value: vi.fn(),
|
|
15
|
+
},
|
|
16
|
+
push: {
|
|
17
|
+
configurable: true,
|
|
18
|
+
value: vi.fn(),
|
|
19
|
+
},
|
|
20
|
+
replace: {
|
|
21
|
+
configurable: true,
|
|
22
|
+
value: vi.fn(),
|
|
23
|
+
},
|
|
24
|
+
href: {
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: location?.href || originalLocation.href,
|
|
28
|
+
},
|
|
29
|
+
host: {
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: location?.host || originalLocation.host,
|
|
33
|
+
},
|
|
34
|
+
hostname: {
|
|
35
|
+
configurable: true,
|
|
36
|
+
writable: true,
|
|
37
|
+
value: location?.hostname || originalLocation.hostname,
|
|
38
|
+
},
|
|
39
|
+
...(location?.pathname !== undefined && {
|
|
40
|
+
pathname: {
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true,
|
|
43
|
+
value: location.pathname,
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
...(location?.search !== undefined && {
|
|
47
|
+
search: {
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: location.search,
|
|
51
|
+
},
|
|
52
|
+
}),
|
|
53
|
+
...(location?.hash !== undefined && {
|
|
54
|
+
hash: {
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: location.hash,
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
...(location?.origin !== undefined && {
|
|
61
|
+
origin: {
|
|
62
|
+
configurable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
value: location.origin,
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
});
|
|
68
|
+
vi.stubGlobal('location', locationMock);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=LocationMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocationMock.js","sourceRoot":"src/","sources":["mocks/LocationMock.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;AAIzC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAA+B;IAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAc,EAAE;QAC3D,GAAG,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;QACrD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,MAAM,EAAE;YACN,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,OAAO,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACf;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,gBAAgB,CAAC,IAAI;SAC/C;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,IAAI,IAAI,gBAAgB,CAAC,IAAI;SAC/C;QACD,QAAQ,EAAE;YACR,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,gBAAgB,CAAC,QAAQ;SACvD;QACD,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,SAAS,IAAI;YACtC,QAAQ,EAAE;gBACR,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,QAAQ;aACzB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI;YACpC,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,MAAM;aACvB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS,IAAI;YAClC,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,IAAI;aACrB;SACF,CAAC;QACF,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI;YACpC,MAAM,EAAE;gBACN,YAAY,EAAE,IAAI;gBAClB,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ,CAAC,MAAM;aACvB;SACF,CAAC;KACH,CAAC,CAAC;IAEH,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare class MutationObserverMock implements MutationObserver {
|
|
2
|
+
takeRecords: MutationObserver['takeRecords'];
|
|
3
|
+
observe: MutationObserver['observe'];
|
|
4
|
+
disconnect: MutationObserver['disconnect'];
|
|
5
|
+
constructor();
|
|
6
|
+
}
|
|
7
|
+
export declare function mockMutationObserver(): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class MutationObserverMock {
|
|
2
|
+
takeRecords = MutationObserverMock.prototype.takeRecords.bind(this);
|
|
3
|
+
observe = MutationObserverMock.prototype.observe.bind(this);
|
|
4
|
+
disconnect = MutationObserverMock.prototype.disconnect.bind(this);
|
|
5
|
+
constructor() { }
|
|
6
|
+
}
|
|
7
|
+
export function mockMutationObserver() {
|
|
8
|
+
MutationObserverMock.prototype.takeRecords = vi.fn(function () {
|
|
9
|
+
return [];
|
|
10
|
+
});
|
|
11
|
+
MutationObserverMock.prototype.observe = vi.fn(function () { });
|
|
12
|
+
MutationObserverMock.prototype.disconnect = vi.fn(function () { });
|
|
13
|
+
vi.stubGlobal('MutationObserver', MutationObserverMock);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=MutationObserverMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MutationObserverMock.js","sourceRoot":"src/","sources":["mocks/MutationObserverMock.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IAC/B,WAAW,GAAoC,oBAAoB,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrG,OAAO,GAAgC,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,UAAU,GAAmC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElG,gBAAe,CAAC;CACjB;AAED,MAAM,UAAU,oBAAoB;IAClC,oBAAoB,CAAC,SAAS,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,oBAAoB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,cAAuC,CAAC,CAAC,CAAC;IACzF,oBAAoB,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,cAAuC,CAAC,CAAC,CAAC;IAE5F,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class ResizeObserverMock {
|
|
2
|
+
disconnect = ResizeObserverMock.prototype.disconnect.bind(this);
|
|
3
|
+
observe = ResizeObserverMock.prototype.observe.bind(this);
|
|
4
|
+
unobserve = ResizeObserverMock.prototype.unobserve.bind(this);
|
|
5
|
+
constructor() { }
|
|
6
|
+
}
|
|
7
|
+
export function mockResizeObserver() {
|
|
8
|
+
ResizeObserverMock.prototype.disconnect = vi.fn(function () { });
|
|
9
|
+
ResizeObserverMock.prototype.observe = vi.fn(function () { });
|
|
10
|
+
ResizeObserverMock.prototype.unobserve = vi.fn(function () { });
|
|
11
|
+
vi.stubGlobal('ResizeObserver', ResizeObserverMock);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ResizeObserverMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResizeObserverMock.js","sourceRoot":"src/","sources":["mocks/ResizeObserverMock.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAkB;IAC7B,UAAU,GAAiC,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9F,OAAO,GAA8B,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,SAAS,GAAgC,kBAAkB,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3F,gBAAe,CAAC;CACjB;AAED,MAAM,UAAU,kBAAkB;IAChC,kBAAkB,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IACxF,kBAAkB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IACrF,kBAAkB,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,cAAqC,CAAC,CAAC,CAAC;IAEvF,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function mockMatchMedia({ matches, mediaQueryMatches }) {
|
|
2
|
+
vi.stubGlobal('matchMedia', vi.fn(function (query) {
|
|
3
|
+
return {
|
|
4
|
+
matches: mediaQueryMatches && mediaQueryMatches[query] !== undefined ? mediaQueryMatches[query] : matches,
|
|
5
|
+
media: query,
|
|
6
|
+
onchange: null,
|
|
7
|
+
addListener: vi.fn(), // deprecated
|
|
8
|
+
removeListener: vi.fn(), // deprecated
|
|
9
|
+
addEventListener: vi.fn(),
|
|
10
|
+
removeEventListener: vi.fn(),
|
|
11
|
+
dispatchEvent: vi.fn(),
|
|
12
|
+
};
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=matchMediaMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchMediaMock.js","sourceRoot":"src/","sources":["mocks/matchMediaMock.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAsB;IAC/E,EAAE,CAAC,UAAU,CACX,YAAY,EACZ,EAAE,CAAC,EAAE,CAAC,UAAU,KAAa;QAC3B,OAAO;YACL,OAAO,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO;YACzG,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa;YACnC,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,aAAa;YACtC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/setup-env.js
CHANGED
|
@@ -1,13 +1,49 @@
|
|
|
1
1
|
import '@testing-library/jest-dom/vitest';
|
|
2
2
|
import { configure as configureTestingLibrary } from '@testing-library/vue';
|
|
3
|
+
// eslint-disable-next-line no-restricted-imports
|
|
3
4
|
import { config, flushPromises } from '@vue/test-utils';
|
|
4
5
|
import { vi } from 'vitest';
|
|
6
|
+
import { mockIntersectionObserver } from './mocks/IntersectionObserverMock.js';
|
|
7
|
+
import { mockLocation } from './mocks/LocationMock.js';
|
|
8
|
+
import { mockMatchMedia } from './mocks/matchMediaMock.js';
|
|
9
|
+
import { mockMutationObserver } from './mocks/MutationObserverMock.js';
|
|
10
|
+
import { mockResizeObserver } from './mocks/ResizeObserverMock.js';
|
|
5
11
|
import cleanupDialogs, { cleanupDialogsMountNode } from './utils/cleanupDialogs.js';
|
|
6
12
|
import cleanupDropdowns from './utils/cleanupDropdowns.js';
|
|
7
13
|
import cleanupMenus, { cleanupMenusMountNode } from './utils/cleanupMenus.js';
|
|
8
14
|
import cleanupModals, { cleanupModalsMountNode } from './utils/cleanupModals.js';
|
|
9
15
|
import cleanupNoty from './utils/cleanupNoty.js';
|
|
10
16
|
import cleanupToasts, { cleanupToastsMountNode } from './utils/cleanupToasts.js';
|
|
17
|
+
// checking if an element is hidden is quite expensive
|
|
18
|
+
// this is only done in CI as a fail safe. It can still explicitly be checked
|
|
19
|
+
// in the test files which helps documenting what is part of the DOM but hidden
|
|
20
|
+
// from assistive technology
|
|
21
|
+
const defaultHidden = !process.env.CI;
|
|
22
|
+
configureTestingLibrary({ testIdAttribute: 'data-test', defaultHidden });
|
|
23
|
+
// Mock the debounce function so that we can test it synchronously
|
|
24
|
+
vi.mock('lodash-es/debounce', () => {
|
|
25
|
+
return {
|
|
26
|
+
default: (fn) => {
|
|
27
|
+
fn.cancel = vi.fn();
|
|
28
|
+
return fn;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
vi.stubGlobal('open', vi.fn());
|
|
34
|
+
mockLocation();
|
|
35
|
+
mockResizeObserver();
|
|
36
|
+
mockIntersectionObserver();
|
|
37
|
+
mockMutationObserver();
|
|
38
|
+
mockMatchMedia({ matches: false });
|
|
39
|
+
global.URL.createObjectURL = vi.fn();
|
|
40
|
+
// Uploading a file does not use axios, so mock the fetch api
|
|
41
|
+
// See src/services/api/files.js->uploadFile for more info
|
|
42
|
+
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ json: vi.fn().mockResolvedValue({}) }));
|
|
43
|
+
// https://github.com/jsdom/jsdom/issues/1695
|
|
44
|
+
Element.prototype.scrollIntoView = vi.fn();
|
|
45
|
+
config.global.mocks['$t'] = (msg) => msg;
|
|
46
|
+
});
|
|
11
47
|
afterEach(() => {
|
|
12
48
|
cleanupModals();
|
|
13
49
|
cleanupToasts();
|
|
@@ -21,80 +57,10 @@ afterEach(async () => {
|
|
|
21
57
|
await flushPromises();
|
|
22
58
|
});
|
|
23
59
|
afterAll(() => {
|
|
24
|
-
// restore `window.location` to the original `jsdom`
|
|
25
|
-
// `Location` object
|
|
26
|
-
global.window.location = oldWindowLocation;
|
|
27
60
|
// remove mount nodes from the DOM
|
|
28
61
|
cleanupModalsMountNode();
|
|
29
62
|
cleanupToastsMountNode();
|
|
30
63
|
cleanupDialogsMountNode();
|
|
31
64
|
cleanupMenusMountNode();
|
|
32
65
|
});
|
|
33
|
-
// checking if an element is hidden is quite expensive
|
|
34
|
-
// this is only done in CI as a fail safe. It can still explicitly be checked
|
|
35
|
-
// in the test files which helps documenting what is part of the DOM but hidden
|
|
36
|
-
// from assistive technology
|
|
37
|
-
const defaultHidden = !process.env.CI;
|
|
38
|
-
configureTestingLibrary({ testIdAttribute: 'data-test', defaultHidden });
|
|
39
|
-
// Mock the debounce function so that we can test it synchronously
|
|
40
|
-
vi.mock('lodash-es/debounce', () => {
|
|
41
|
-
return {
|
|
42
|
-
default: (fn) => {
|
|
43
|
-
fn.cancel = vi.fn();
|
|
44
|
-
return fn;
|
|
45
|
-
},
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
config.global.mocks['$t'] = (msg) => msg;
|
|
49
|
-
const oldWindowLocation = global.window.location;
|
|
50
|
-
// @ts-expect-error - dunno
|
|
51
|
-
delete global.window.location;
|
|
52
|
-
// @ts-expect-error - dunno
|
|
53
|
-
global.window.location = Object.defineProperties({}, {
|
|
54
|
-
...Object.getOwnPropertyDescriptors(oldWindowLocation),
|
|
55
|
-
assign: {
|
|
56
|
-
configurable: true,
|
|
57
|
-
value: vi.fn(),
|
|
58
|
-
},
|
|
59
|
-
href: {
|
|
60
|
-
configurable: true,
|
|
61
|
-
writable: true,
|
|
62
|
-
value: {
|
|
63
|
-
replace: vi.fn(),
|
|
64
|
-
},
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
vi.stubGlobal('open', vi.fn());
|
|
68
|
-
global.window.ResizeObserver =
|
|
69
|
-
global.window.ResizeObserver ||
|
|
70
|
-
class ResizeObserver {
|
|
71
|
-
observe() { }
|
|
72
|
-
unobserve() { }
|
|
73
|
-
disconnect() { }
|
|
74
|
-
};
|
|
75
|
-
const IntersectionObserverMock = vi.fn(() => ({
|
|
76
|
-
get root() {
|
|
77
|
-
return;
|
|
78
|
-
},
|
|
79
|
-
disconnect: vi.fn(),
|
|
80
|
-
observe: vi.fn(),
|
|
81
|
-
takeRecords: vi.fn(),
|
|
82
|
-
unobserve: vi.fn(),
|
|
83
|
-
}));
|
|
84
|
-
vi.stubGlobal('IntersectionObserver', IntersectionObserverMock);
|
|
85
|
-
// Uploading a file does not use axios, so mock the fetch api
|
|
86
|
-
// See src/services/api/files.js->uploadFile for more info
|
|
87
|
-
vi.stubGlobal('fetch', vi.fn().mockResolvedValue({ json: vi.fn().mockResolvedValue({}) }));
|
|
88
|
-
// https://github.com/jsdom/jsdom/issues/1695
|
|
89
|
-
Element.prototype.scrollIntoView = vi.fn();
|
|
90
|
-
window.matchMedia = vi.fn((query) => ({
|
|
91
|
-
matches: false,
|
|
92
|
-
media: query,
|
|
93
|
-
onchange: null,
|
|
94
|
-
addListener: vi.fn(),
|
|
95
|
-
removeListener: vi.fn(),
|
|
96
|
-
addEventListener: vi.fn(),
|
|
97
|
-
removeEventListener: vi.fn(),
|
|
98
|
-
dispatchEvent: vi.fn(),
|
|
99
|
-
}));
|
|
100
66
|
//# sourceMappingURL=setup-env.js.map
|
package/dist/setup-env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-env.js","sourceRoot":"src/","sources":["setup-env.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,SAAS,IAAI,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,OAAO,
|
|
1
|
+
{"version":3,"file":"setup-env.js","sourceRoot":"src/","sources":["setup-env.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,SAAS,IAAI,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,iDAAiD;AACjD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,cAAc,EAAE,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,YAAY,EAAE,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,aAAa,EAAE,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,aAAa,EAAE,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEjF,sDAAsD;AACtD,6EAA6E;AAC7E,+EAA+E;AAC/E,4BAA4B;AAC5B,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC,uBAAuB,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;AAEzE,kEAAkE;AAClE,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACjC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE;YACd,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/B,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,CAAC;IACrB,wBAAwB,EAAE,CAAC;IAC3B,oBAAoB,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAEnC,MAAM,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAErC,6DAA6D;IAC7D,0DAA0D;IAC1D,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3F,6CAA6C;IAC7C,OAAO,CAAC,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAE3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,aAAa,EAAE,CAAC;IAChB,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,CAAC;AACrB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,wGAAwG;IACxG,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,GAAG,EAAE;IACZ,kCAAkC;IAClC,sBAAsB,EAAE,CAAC;IACzB,sBAAsB,EAAE,CAAC;IACzB,uBAAuB,EAAE,CAAC;IAC1B,qBAAqB,EAAE,CAAC;AAC1B,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leaflink/dom-testing-utils",
|
|
3
|
-
"version": "5.2.
|
|
3
|
+
"version": "5.2.2",
|
|
4
4
|
"description": "Frontend DOM testing utilities",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=18",
|
|
@@ -40,16 +40,16 @@
|
|
|
40
40
|
},
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"msw": "^2.
|
|
43
|
+
"msw": "^2.7.3"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@vitest/coverage-v8": "^0.
|
|
46
|
+
"@vitest/coverage-v8": "^3.0.9",
|
|
47
47
|
"eslint": "^8.49.0",
|
|
48
|
-
"eslint-config-leaflink": "^
|
|
48
|
+
"eslint-config-leaflink": "^3.5.0",
|
|
49
49
|
"jsdom": "^22.1.0",
|
|
50
|
-
"typescript": "^5.
|
|
51
|
-
"vite": "^
|
|
52
|
-
"vitest": "^0.
|
|
50
|
+
"typescript": "^5.8.2",
|
|
51
|
+
"vite": "^6.2.2",
|
|
52
|
+
"vitest": "^3.0.9"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"@testing-library/jest-dom": "^5 || ^6",
|