@analogjs/vitest-angular 1.4.0-beta.6 → 1.4.0-beta.7
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/README.md +1 -1
- package/package.json +3 -3
- package/setup-zone.d.ts +4 -0
- package/setup-zone.js +219 -0
- package/setup-zone.js.map +1 -0
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ export default defineConfig(({ mode }) => ({
|
|
|
58
58
|
Next, define a `src/test-setup.ts` file to setup the `TestBed`:
|
|
59
59
|
|
|
60
60
|
```ts
|
|
61
|
-
import '@analogjs/vitest-angular/setup';
|
|
61
|
+
import '@analogjs/vitest-angular/setup-zone';
|
|
62
62
|
|
|
63
63
|
import {
|
|
64
64
|
BrowserDynamicTestingModule,
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@analogjs/vitest-angular",
|
|
3
|
-
"version": "1.4.0-beta.
|
|
3
|
+
"version": "1.4.0-beta.7",
|
|
4
4
|
"description": "Vitest Builder for Angular",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"author": "Brandon Roberts <robertsbt@gmail.com>",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./src/index.js",
|
|
9
9
|
"./package.json": "./package.json",
|
|
10
|
-
"./setup": "./setup.js"
|
|
10
|
+
"./setup-zone": "./setup-zone.js"
|
|
11
11
|
},
|
|
12
12
|
"keywords": [
|
|
13
13
|
"angular",
|
|
@@ -45,4 +45,4 @@
|
|
|
45
45
|
]
|
|
46
46
|
},
|
|
47
47
|
"main": "./src/index.js"
|
|
48
|
-
}
|
|
48
|
+
}
|
package/setup-zone.d.ts
ADDED
package/setup-zone.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("zone.js");
|
|
4
|
+
require("zone.js/plugins/sync-test");
|
|
5
|
+
require("zone.js/plugins/proxy");
|
|
6
|
+
require("zone.js/testing");
|
|
7
|
+
/**
|
|
8
|
+
* Patch Vitest's describe/test/beforeEach/afterEach functions so test code
|
|
9
|
+
* always runs in a testZone (ProxyZone).
|
|
10
|
+
*/
|
|
11
|
+
/* global Zone */
|
|
12
|
+
const Zone = globalThis['Zone'];
|
|
13
|
+
if (Zone === undefined) {
|
|
14
|
+
throw new Error('Missing: Zone (zone.js)');
|
|
15
|
+
}
|
|
16
|
+
if (globalThis['__vitest_zone_patch__'] === true) {
|
|
17
|
+
throw new Error("'vitest' has already been patched with 'Zone'.");
|
|
18
|
+
}
|
|
19
|
+
globalThis['__vitest_zone_patch__'] = true;
|
|
20
|
+
const SyncTestZoneSpec = Zone['SyncTestZoneSpec'];
|
|
21
|
+
const ProxyZoneSpec = Zone['ProxyZoneSpec'];
|
|
22
|
+
if (SyncTestZoneSpec === undefined) {
|
|
23
|
+
throw new Error('Missing: SyncTestZoneSpec (zone.js/plugins/sync-test)');
|
|
24
|
+
}
|
|
25
|
+
if (ProxyZoneSpec === undefined) {
|
|
26
|
+
throw new Error('Missing: ProxyZoneSpec (zone.js/plugins/proxy.js)');
|
|
27
|
+
}
|
|
28
|
+
const env = globalThis;
|
|
29
|
+
const ambientZone = Zone.current;
|
|
30
|
+
// Create a synchronous-only zone in which to run `describe` blocks in order to
|
|
31
|
+
// raise an error if any asynchronous operations are attempted
|
|
32
|
+
// inside of a `describe` but outside of a `beforeEach` or `it`.
|
|
33
|
+
const syncZone = ambientZone.fork(new SyncTestZoneSpec('vitest.describe'));
|
|
34
|
+
function wrapDescribeInZone(describeBody) {
|
|
35
|
+
return function (...args) {
|
|
36
|
+
return syncZone.run(describeBody, null, args);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Create a proxy zone in which to run `test` blocks so that the tests function
|
|
40
|
+
// can retroactively install different zones.
|
|
41
|
+
const testProxyZone = ambientZone.fork(new ProxyZoneSpec());
|
|
42
|
+
function wrapTestInZone(testBody) {
|
|
43
|
+
if (testBody === undefined) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const wrappedFunc = function () {
|
|
47
|
+
return testProxyZone.run(testBody, null, arguments);
|
|
48
|
+
};
|
|
49
|
+
try {
|
|
50
|
+
Object.defineProperty(wrappedFunc, 'length', {
|
|
51
|
+
configurable: true,
|
|
52
|
+
writable: true,
|
|
53
|
+
enumerable: false,
|
|
54
|
+
});
|
|
55
|
+
wrappedFunc.length = testBody.length;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
return testBody.length === 0
|
|
59
|
+
? () => testProxyZone.run(testBody, null)
|
|
60
|
+
: (done) => testProxyZone.run(testBody, null, [done]);
|
|
61
|
+
}
|
|
62
|
+
return wrappedFunc;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Allows Vitest to handle Angular test fixtures
|
|
66
|
+
*
|
|
67
|
+
* Vitest Snapshot guide ==> https://vitest.dev/guide/snapshot.html
|
|
68
|
+
*
|
|
69
|
+
* @returns customSnapshotSerializer for Angular Fixture Component
|
|
70
|
+
*/
|
|
71
|
+
const customSnapshotSerializer = () => {
|
|
72
|
+
function serialize(val, config, indentation, depth, refs, printer) {
|
|
73
|
+
// `printer` is a function that serializes a value using existing plugins.
|
|
74
|
+
return `${printer(fixtureVitestSerializer(val), config, indentation, depth, refs)}`;
|
|
75
|
+
}
|
|
76
|
+
function test(val) {
|
|
77
|
+
// * If it's a ComponentFixture we apply the transformation rules
|
|
78
|
+
return val && isAngularFixture(val);
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
serialize,
|
|
82
|
+
test,
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Check if is an Angular fixture
|
|
87
|
+
*
|
|
88
|
+
* @param val Angular fixture
|
|
89
|
+
* @returns boolean who check if is an angular fixture
|
|
90
|
+
*/
|
|
91
|
+
function isAngularFixture(val) {
|
|
92
|
+
if (typeof val !== 'object') {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (val['componentRef'] || val['componentInstance']) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
if (val['componentType']) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
// * Angular fixture keys in Fixture component Object
|
|
102
|
+
const fixtureKeys = [
|
|
103
|
+
'componentRef',
|
|
104
|
+
'ngZone',
|
|
105
|
+
'effectRunner',
|
|
106
|
+
'_autoDetect',
|
|
107
|
+
'_isStable',
|
|
108
|
+
'_isDestroyed',
|
|
109
|
+
'_resolve',
|
|
110
|
+
'_promise',
|
|
111
|
+
'_onUnstableSubscription',
|
|
112
|
+
'_onStableSubscription',
|
|
113
|
+
'_onMicrotaskEmptySubscription',
|
|
114
|
+
'_onErrorSubscription',
|
|
115
|
+
'changeDetectorRef',
|
|
116
|
+
'elementRef',
|
|
117
|
+
'debugElement',
|
|
118
|
+
'componentInstance',
|
|
119
|
+
'nativeElement',
|
|
120
|
+
];
|
|
121
|
+
// * Angular fixture keys in Fixture componentRef Object
|
|
122
|
+
const fixtureComponentRefKeys = [
|
|
123
|
+
'location',
|
|
124
|
+
'_rootLView',
|
|
125
|
+
'_tNode',
|
|
126
|
+
'previousInputValues',
|
|
127
|
+
'instance',
|
|
128
|
+
'changeDetectorRef',
|
|
129
|
+
'hostView',
|
|
130
|
+
'componentType',
|
|
131
|
+
];
|
|
132
|
+
return (JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureKeys) ||
|
|
133
|
+
JSON.stringify(Object.keys(val)) === JSON.stringify(fixtureComponentRefKeys));
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Serialize Angular fixture for Vitest
|
|
137
|
+
*
|
|
138
|
+
* @param fixture Angular Fixture Component
|
|
139
|
+
* @returns HTML Child Node
|
|
140
|
+
*/
|
|
141
|
+
function fixtureVitestSerializer(fixture) {
|
|
142
|
+
// * Get Component meta data
|
|
143
|
+
const componentType = (fixture && fixture.componentType
|
|
144
|
+
? fixture.componentType
|
|
145
|
+
: fixture.componentRef.componentType);
|
|
146
|
+
let inputsData = '';
|
|
147
|
+
const selector = Reflect.getOwnPropertyDescriptor(componentType, '__annotations__')?.value[0].selector;
|
|
148
|
+
if (componentType && componentType.propDecorators) {
|
|
149
|
+
inputsData = Object.entries(componentType.propDecorators)
|
|
150
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
151
|
+
.join('');
|
|
152
|
+
}
|
|
153
|
+
// * Get DOM Elements
|
|
154
|
+
const divElement = fixture && fixture.nativeElement
|
|
155
|
+
? fixture.nativeElement
|
|
156
|
+
: fixture.location.nativeElement;
|
|
157
|
+
// * Convert string data to HTML data
|
|
158
|
+
const doc = new DOMParser().parseFromString(`<${selector} ${inputsData}>${divElement.innerHTML}</${selector}>`, 'text/html');
|
|
159
|
+
return doc.body.childNodes[0];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* bind describe method to wrap describe.each function
|
|
163
|
+
*/
|
|
164
|
+
const bindDescribe = (originalVitestFn) => function (...eachArgs) {
|
|
165
|
+
return function (...args) {
|
|
166
|
+
args[1] = wrapDescribeInZone(args[1]);
|
|
167
|
+
// @ts-ignore
|
|
168
|
+
return originalVitestFn.apply(this, eachArgs).apply(this, args);
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* bind test method to wrap test.each function
|
|
173
|
+
*/
|
|
174
|
+
const bindTest = (originalVitestFn) => function (...eachArgs) {
|
|
175
|
+
return function (...args) {
|
|
176
|
+
args[1] = wrapTestInZone(args[1]);
|
|
177
|
+
// @ts-ignore
|
|
178
|
+
return originalVitestFn.apply(this, eachArgs).apply(this, args);
|
|
179
|
+
};
|
|
180
|
+
};
|
|
181
|
+
['describe'].forEach((methodName) => {
|
|
182
|
+
const originalvitestFn = env[methodName];
|
|
183
|
+
env[methodName] = function (...args) {
|
|
184
|
+
args[1] = wrapDescribeInZone(args[1]);
|
|
185
|
+
return originalvitestFn.apply(this, args);
|
|
186
|
+
};
|
|
187
|
+
env[methodName].each = bindDescribe(originalvitestFn.each);
|
|
188
|
+
if (methodName === 'describe') {
|
|
189
|
+
env[methodName].only = bindDescribe(originalvitestFn.only);
|
|
190
|
+
env[methodName].skip = bindDescribe(originalvitestFn.skip);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
['test', 'it'].forEach((methodName) => {
|
|
194
|
+
const originalvitestFn = env[methodName];
|
|
195
|
+
env[methodName] = function (...args) {
|
|
196
|
+
args[1] = wrapTestInZone(args[1]);
|
|
197
|
+
return originalvitestFn.apply(this, args);
|
|
198
|
+
};
|
|
199
|
+
env[methodName].each = bindTest(originalvitestFn.each);
|
|
200
|
+
env[methodName].only = bindTest(originalvitestFn.only);
|
|
201
|
+
env[methodName].skip = bindTest(originalvitestFn.skip);
|
|
202
|
+
if (methodName === 'test' || methodName === 'it') {
|
|
203
|
+
env[methodName].todo = function (...args) {
|
|
204
|
+
return originalvitestFn.todo.apply(this, args);
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
['beforeEach', 'afterEach', 'beforeAll', 'afterAll'].forEach((methodName) => {
|
|
209
|
+
const originalvitestFn = env[methodName];
|
|
210
|
+
env[methodName] = function (...args) {
|
|
211
|
+
args[0] = wrapTestInZone(args[0]);
|
|
212
|
+
return originalvitestFn.apply(this, args);
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
['expect'].forEach((methodName) => {
|
|
216
|
+
const originalvitestFn = env[methodName];
|
|
217
|
+
return originalvitestFn.addSnapshotSerializer(customSnapshotSerializer());
|
|
218
|
+
});
|
|
219
|
+
//# sourceMappingURL=setup-zone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-zone.js","sourceRoot":"","sources":["../../../packages/vitest-angular/setup-zone.ts"],"names":[],"mappings":"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"}
|